質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

5132閲覧

入力済みのスプレッドシートにフォームから希望箇所だけ修正かけたい

sivaya

総合スコア8

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/03/29 11:53

編集2018/03/29 11:55

前提・実現したいこと

GASを使用して、フォームからスプレッドシートにデータを入力・編集したい。→できた

フォームで入力された番号によってデータを書き込む行を指定して入力したい。→できた

既にデータが入力してある行の一部に修正や追加を行いたい時、そのままで良い箇所までフォーム上で再入力するのは面倒なので、編集・修正したい箇所のフォーム項目だけ入力することで、その他の未入力部分を""で上書きすることなく(でも今のままだとそうなってしまう。セルの中身が真っ白に飛ぶ)修正希望の項目だけ編集できるようにしたい。→やり方わからない

どのようにすればよいでしょうか。

フォームにデータNo.を入力すると他の項目フォームに既に入力してあるデータをシートから読んでその値を入力済みの状態にすればいいのかな?と思いますが、そのやり方がわかりません……。

他のやり方、違う考え方に基づく方法でも構いません。
該当箇所だけを部分的に直せるようにするにはどうしたら良いでしょうか?

初心者です。コピペですぐ使えるコードをクレとは申しませんが
なるべく具体的にわかりやすく教えていただけるとありがたいです。
変数名からお察しの通り、ビジネスユースではなく趣味で使用したいものなので高速化にはそれほどこだわりはありません。とりあえず動けばいいと思っています。

でも趣味なら信頼してる人だけにURL教えてスプレッドシートを直に編集させればいいじゃない、という回答はナシでお願いします……。

発生している問題・エラーメッセージ

今の状態ではエラーは起きていません。

GAS

function doPost(e){ //データ取得 長すぎなので割愛。実際は28項目あります var number = e.parameter.number; var chrName = e.parameter.chrName; var type = e.parameter.type; //配列に格納 var arrData = [[chrName,type]]; //入力先の行番号を特定 var rowNum = parseInt(number)+1; //データを記録するスプレッドシート idはダミーです。テスト時は実際のurlを使っています var mySheet =SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/XXXX/edit#gid=0"); //データを記入。未入力項目があると入力されていた情報が飛んでしまう。 //範囲指定されてる列数多すぎなのは本当は28項目あるから。 mySheet.getRange("C"+rowNum+":AD"+rowNum).setValues(arrData); return HtmlService.createHtmlOutputFromFile("EntryForm"); } function doGet() { var html = HtmlService.createTemplateFromFile('EntryForm'); return html.evaluate(); }

HTML

<!--body内のformの中から3項目だけ抜粋--> <form method="post" action="https://script.google.com/macros/s/XXX/dev"> <label for="number">キャラNo.<span class="red">(必須)</span></label> <input type="number" name="number" required /> <label for="chrName">キャラクター名</label> <input type="text" name="chrName"/> <label for="type">タイプ</label> <select name="type"> <option value=""></option> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> </select> <input type="submit" value="登録する"> </form>

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
最初はフォームのテキストボックスに修正をかけたいデータのIDを入力し、
そのIDを参照してスプレッドシートの行数を特定して値を読み込み
フォームに表示させればいいのかな?と考えていましたが
それだと、まず番号を入力→読込ボタン押す→からの入力、という手間が増える仕様になるのでやめました。

フォームへのリンクを置く個別データページにURLパラメーター(ID)を付与して
その番号を見て、スプレッドシートから指定の入力済みのデータをひっぱり
フォームの初期値としてセットする、という仕様にしました。
修正かけたい個別ページからアクセスすれば入力済みの値がセットされたフォームが出るので、
そこで修正部分だけ編集して送信すれば、セルが真っ白に飛ぶこともなくなりました。

質問の仕方がふわっとしすぎてすみませんでした。。
やりたいことは一言で言うと、DBとDB入力のためのGUIを作りたかったのです。
知らないことが多すぎると、ピンポイントな質問もできません。

GASからHTMLへ複数セルの値を受け渡すのはjsonがよきかな、と聞いたのですが
やり方が悪かったのかエラーの嵐で断念しました。。
最終的にこういうコードにしました。
GAS
function doGet(e) {
var html = HtmlService.createTemplateFromFile('EntryForm');
var cid = e.parameter.cid; //URLパラメーターからID取得
var rowNum = parseInt(cid)+1; //idを行番号に変換
var mySheet =SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/SHEETID/edit#gid=0");
var range = mySheet.getRange("C"+rowNum+":AD"+rowNum); //データの入っているC~AD列の1行をrangeとする
var defSet = range.getValues();
html.defSet = defSet;
html.cid =cid;
return html.evaluate();
}

HTML内のjavascript

<script> var cid = <?=cid?>; document.getElementById("number").value = cid; var defSet = <?=defSet?>; var sData = defSet.split(","); //配列に変換 document.getElementById("chrName").value = sData[0]; ・ ・(項目の数だけ代入。あまり美しいコードは言えないがよしとする) ・ </script>

投稿2018/03/30 17:40

sivaya

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問