質問: i + 1; } } if(row != -1) { sh.getRange(row, 14, 1, 1).setValue(str); } } --- ### 試したこと 1.申請フォーム作成済み。 2.フォームの送信をトリガにして承認者へ承認依頼メールを送信→作成済み。 3.承認者へのメール(申請内容、「承認」「否認」のURLリンクも記載)→作成済み。 4.「承認」若しくは「否認」のURLリンクを押すと、『承認しました』若しくは『否認しました』と記載したHTMLを表示。→作成済み。 「承認」若しくは「否認」のURLリンクを押すことで承認したか否認したかを判断して、その内容をスプレッドシートに記入したい(タイムスタンプでどの申請かを判定)と考えておりますが、そのようなことが可能なのか、どのようにすれば良いか分かりません。 当方GASはおろかプログラミング自体が素人のため、ネットで色々調べてソースをコピペしたりしながらなんとか途中まで作成しました。 その為、ソースのちょっとした修正や、キーワードだけでの説明を理解することが難しい為、ご回答頂ける場合は極力ソースコードなども省略せず記載頂けますと幸いです。
回答: doGet.gsで、returnする前に、書き込みをすればよいと思います。 ソースコードですが、書き込むべきスプレッドシートはどうやって特定するのか(スプレッドシートのidなのか、driveのフォルダidとスプレッドシートの名前の組み合わせなのか)や、そのスプレッドシートの何というシートのどこのセルに、何と何を書き込むのかを具体的に仕様として示していただかない限り、有意な回答は得られないと思います。 -- 追記 今のままではタイムスタンプが送信されないので ``` html += '承認'; html += '否認'; ``` のようにしてください。するとクリック時にタイムスタンプが送信できます。 その状態で ``` function doGet(e){ var page=e.parameter["p"]; var timeStamp=e.parameter["t"]; if(page == "ok" && timeStamp){ setter(timeStamp, "○"); return HtmlService.createHtmlOutputFromFile('ok'); } else if(page == "ng" && timeStamp){ setter(timeStamp, "×"); return HtmlService.createHtmlOutputFromFile('ng'); } else{ return HtmlService.createHtmlOutputFromFile('Error'); } } function setter(timestamp, str) { var sh = SpreadsheetApp.openById("").getSheetByName("フォームの回答"); var vals = sh.getDataRange().getValues(); var row = -1; for(var i = 1; i < vals.length; i++) { if(Utilities.formatDate(vals[i][0], "JST", "yyyy/MM/dd HH:mm:ss") == timestamp) { row = i + 1; } } if(row != -1) { sh.getRange(row, 14, 1, 1).setValue(str); } } ``` とやると、書き込みができるのではないかと思います。 --- 追記 下記のテスト関数を追加して、関数を実行からテストして書き込まれるか見ていただけますか? ``` function test() { var timestamp = "シートにあるタイムスタンプ"; //固定値 var str = "○"; setter(timestamp, str); } ```