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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Q&A

解決済

1回答

1491閲覧

GASでスプレッドシートの指定場所に決済ステータスの結果を表示させたい

fivebig

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

0グッド

0クリップ

投稿2023/01/12 06:19

前提

GASの初心者です。
HPのコードをコピーし、GoogleFormsでGASを使用し自作のワークフローを作成にチャレンジしています。

実現したいこと

GASでスプレッドシートの指定場所に決済ステータスの結果を表示させたいです。
ご教示お願い致します。

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

承認・否認がスプレッドシート16行目の決済ステータス列に表示されない
11列目に上書きされてしまう

エラーメッセージ
approval.gs
TypeError: Cannot read properties of undefined (reading 'parameters')
doGet @ approval.gs:8

全コード

コード.gs
FormApp.getActiveForm()
function onFormSubmit(e) {
// プレーンテキストのメール本文
let body = "承認をお願いいたします。\n\n"
// HTMLテキストのメール本文
let htmlBody = "<p>承認をお願いいたします。</p>"

// GoogleFormから回答内容を取得します let itemResponses = e.response.getItemResponses(); let recipientMail = ""; let approverMail = ""; for (var i=0; i < itemResponses.length; i++) { let formData = itemResponses[i]; let formLabel = formData.getItem().getTitle(); let response = formData.getResponse(); switch (formLabel) { case "承認者のメールアドレス": approverMail = response; break; case "申請者名": name = response; break; case "申請内容": title = response; break; case "開始日": daystart = response; break; case "開始時間": starttime = response; break; case "終了日": dayend = response; break; case "終了時間": endtime = response; break; case "振替休日": holiday = response; break; case "代休の根拠となる勤務日": day = response; break; case "業務内容": content = response; break; case "現場名": sitename = response; break; default: note = response; break; } } let spreadSheetId = "1rEVcm1FtDcUUpmJmZgoNE_ALOA1tR8zdn1Rc7FVw-ow"; // スプレッドシートのID

let spreadsheet = SpreadsheetApp.openById(spreadSheetId);
let activeSheet = spreadsheet.getActiveSheet();

// この行を追加します(スプレッドシートの最終行を取得する) let lastRowNo = activeSheet.getLastRow(); // URLを先程公開したDeploy as web appのURLに書き換えてパラメータを追加します。 let url = "https://script.google.com/a/macros/naribun.com/s/AKfycbxjRXuMwARbtC6PMQBcLkwx3cNaafxRNd39yMAtVSESdKIm1Fe8vZMdzEvEEQP6rXylEw/exec?row=" + lastRowNo;

body = body + "申請内容:" + title + "\n申請者名:" + "\n開始日:" + daystart + "\n開始時間:" + starttime + "\n終了日:" + dayend + "\n終了時間:" + endtime + "\n振替休日:" + holiday + "\n代休の根拠となる勤務日:" + day + "\n業務内容:" + content + "\n現場名:" + sitename + "\n備考:" + note;
htmlBody = htmlBody + "<span>申請内容:" + title + "</span><br><span>申請者名:" + name + "</span><br><span>開始日:" + daystart + "</span><br><span>開始時間:" + starttime + "</span><br><span>終了日:" + dayend + "</span><br><span>終了時間:" + endtime + "</span><br><span>振替休日:" + holiday + "</span><br><span>代休の根拠となる勤務日:" + day + "</span><br><span>業務内容:" + content + "</span><br><span>現場名:" + sitename +"</span><br><span>備考:" + note + "</span><br><br>";
htmlBody = htmlBody + "<a href=" + url + "&status=approve" + ">承認</a> <a href=" + url + "&status=deny" + ">否認</a>";
GmailApp.sendEmail(approverMail, title, body, {htmlBody: htmlBody});
}

approval.gs
function doGet(e) {
let spreadSheetId = "1rEVcm1FtDcUUpmJmZgoNE_ALOA1tR8zdn1Rc7FVw-ow";
let spreadsheet = SpreadsheetApp.openById(spreadSheetId);
let activeSheet = spreadsheet.getActiveSheet();

let html = ""; if (e.parameters.status == "approve") { html = "<h1>承認しました。</h1>"; activeSheet.getRange(e.parameters.row, 11).setValue('承認'); } else { html = "<h1>否認しました。</h1>"; activeSheet.getRange(e.parameters.row, 11).setValue('否認'); } return HtmlService.createHtmlOutput(html);

}

試したこと

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

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/01/12 12:59

「16行目の決済ステータス列に表示されない」というのは、正しくは「16"列"目の決済ステータス列に表示したいのに、11列目に表示されてしまう」という意味でしょうか。
fivebig

2023/01/12 23:09

返信ありがとうございます。 ご指摘の通り16列目の決済ステータスです。
guest

回答1

0

ベストアンサー

下記のように、approve.gs の中で、11列目に書き込んでいる部分を16列目に書き込むように修正してみてはいかがでしょうか。
(先頭「-」は削除、先頭「+」の行は追加)

approve.gs

diff

1function doGet(e) { 2 let spreadSheetId = "1rEVcm1FtDcUUpmJmZgoNE_ALOA1tR8zdn1Rc7FVw-ow"; 3 let spreadsheet = SpreadsheetApp.openById(spreadSheetId); 4 let activeSheet = spreadsheet.getActiveSheet(); 5 6 let html = ""; 7 8 if (e.parameters.status == "approve") { 9 html = "<h1>承認しました。</h1>"; 10- activeSheet.getRange(e.parameters.row, 11).setValue('承認'); 11+ activeSheet.getRange(e.parameters.row, 16).setValue('承認'); 12 } else { 13 html = "<h1>否認しました。</h1>"; 14- activeSheet.getRange(e.parameters.row, 11).setValue('否認'); 15+ activeSheet.getRange(e.parameters.row, 16).setValue('否認'); 16 } 17 18 return HtmlService.createHtmlOutput(html); 19}

投稿2023/01/13 13:14

編集2023/01/13 13:17
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

fivebig

2023/01/14 02:09

qnoirsasa様 ご回答ありがとうございます。 ご指摘の通り11列目を16列目に書き込むように修正しましたが、同じ11例目に記載されてしましました。 approve.gsの実行ログで下記にエラーがでています。 TypeError: Cannot read properties of undefined (reading 'parameters') doGet @ approval.gs:8 また、デプロイを更新しウエブアプリにURLをクリックすると下記のようなエラーが発生します。 Exception: パラメータ(null,number)が SpreadsheetApp.Sheet.getRange のメソッドのシグネチャと一致しません。(行 14、ファイル「approval」) またご教授いただければ幸いです。
退会済みユーザー

退会済みユーザー

2023/01/14 02:57 編集

①「変わらず11列目に記載されてしまう」「TypeError: Cannot read properties of undefined (reading 'parameters')というエラーがでる」 →これらの原因は、コード.gsの真ん中あたりにあるコメント「 // URLを先程公開したDeploy as web appのURLに書き換えてパラメータを追加します。」の1つ下の行にあるURLが更新されていないせいだと考えられます。 (古いデプロイURLのままなので、古いコード内容が実行されている、ということです」 右上の「デプロイ」→「新しいデプロイ」を選択して、もう一度デプロイし、上で言及したデプロイURLを、発行された新デプロイURLに書き換えます そして、もう一度右上の「デプロイ」をクリックし今度は「デプロイの管理」を選んで、直近のデプロイに新バージョンが当たるように操作してください。 この具体的なやり方は https://ryjkmr.com/gas-web-app-deploy-new-same-url/ を見てください。 この操作はコードを修正するたびに毎回必要です。 面倒ならば、「デプロイ」ボタン→「デプロイをテスト」で発行されるテスト用のデプロイURLをコード上のURLに指定すれば、毎回バージョンを変える必要はなくなります。(ただ、この場合でもデプロイ内容反映のためにコード修正のたびに「デプロイをテスト」のクリックする必要はあります。)
退会済みユーザー

退会済みユーザー

2023/01/14 02:52

②「また、デプロイを更新しウエブアプリにURLをクリックすると下記のようなエラーが発生します。 Exception: パラメータ(null,number)が SpreadsheetApp.Sheet.getRange のメソッドのシグネチャと一致しません。(行 14、ファイル「approval」)」 このエラーの理由は、デプロイ画面で発行されるウェブアプリのurlには、行数をあらわす「row」というパラメータがないためです。 rowパラメータがないurlをクリックして上記のエラーが出るのは仕様です。 申請内容が書かれた自動送信されるメールに記載されているURLには、rowパラメータがついているはずですので(他の箇所にバグ等がない限り)正常に動作するものと思われます。
fivebig

2023/01/16 04:25

qnoir様 ありがとうございます。 解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問