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

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

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

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

JavaScript

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

Q&A

解決済

1回答

561閲覧

フォーム→LINEをGASで送信するときにセクション名も表示したい

umimuk

総合スコア2

Google Apps Script

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

JavaScript

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

0グッド

1クリップ

投稿2023/03/30 01:24

編集2023/04/01 12:42

実現したいこと

業務上の数字報告をフォームでし、LINEに転送したときにセクション名も表示したいです。

前提

この数字報告が、フォームでは同じ報告対象の項目を個人数字なのか店舗数字なのかを、セクション毎で分けて報告するが、LINEに転送されるとフォームの質問項目のみ表示されなんの数字かがわからない状況です。
なので、LINEに送信された際に以下のイメージで送信されてほしい。

[実績報告]
セクション1
質問/回答
セクション2
質問/回答

該当のソースコード

https://qiita.com/guchimina/items/aa36e27875ae26876d2c
上記のコードをコピペで作成しております。

JavaScript

1function GoogleFormToLine(){ 2 var sheet = SpreadsheetApp.getActiveSheet(); //sheetの指定 3 var row = sheet.getLastRow(); //行数 4 var column = sheet.getLastColumn(); //列数 5 var range = sheet.getDataRange(); //sheetから範囲指定するための準備 6 var message = ""; 7 for(var i=2;i<=column;i++){ 8 var item = range.getCell(1, i).getValue(); //1行目 9 var value = range.getCell(row, i).getValue(); //最終行 10 if (!value) {continue}; 11 message += "\n"+item+ +value+"\n"; 12 } 13 SendToLine(message); 14} 15 16//LINEに通知 17function SendToLine(message){ 18 //ファイル→プロジェクトのプロパティ→スプリクトのプロパティからLINE_TOKENを設定しておく 19 var token = PropertiesService.getScriptProperties().getProperty('LINE_TOKEN'); 20 var op = 21 { 22 "method" : "post", 23 "Content-Type" : "application/x-www-form-urlencoded", 24 "payload": "message=" + message, 25 "headers":{"Authorization" : "Bearer " + token} 26 }; 27 var res = UrlFetchApp.fetch("https://notify-api.line.me/api/notify",op); 28 Logger.log(JSON.parse(res.getContentText())); //Response 29}

試したこと

調べてもそれらしきものを見つけれなかったためコードの方は試してないです。
フォーム送信後のスプレッドにてセクションを入れたいところに新しい列を作成してみるも、LINEに送信すると、なぜかセクションの後ろに0がついてしまう。
イメージ説明イメージ説明
その後実際に報告する数字が0だった質問は省くようコード入力するも、そうしたらセクションが空白項目になるため、出て来ない。

追記画像
イメージ説明

修正後コード

javascript

1//spreadsheetからデータを取得 2function GoogleFormToLine(){ 3 var sheet = SpreadsheetApp.getActiveSheet(); //sheetの指定 4 var row = sheet.getLastRow(); //行数 5 var column = sheet.getLastColumn(); //列数 6 var range = sheet.getDataRange(); //sheetから範囲指定するための準備 7 var message = ""; 8 for(var i=3;i<=column;i++){ 9 var item = range.getCell(1, i).getValue(); //1行目 10 var value = range.getCell(row, i).getValue(); //最終行 11 if (item == "報告対象日" ){ 12 var date = new Date(value) 13 var weeks = ["日","月","火","水","木","金","土"]; 14 var weekstr = weeks[date.getDay()]; 15 var ymd = Utilities.formatDate(date, "Asia/Tokyo", "MM/dd"); 16 value = ymd + "(" + weekstr + ")" 17 } 18 if (item.includes("【") && item.includes("】")) { 19 value = ""; 20 } else { 21 item += " / "; 22 } 23 24 message += "\n"+item + value+ "\n" ; 25 } 26 SendToLine(message); 27} 28//LINEに通知 29function SendToLine(message){ 30 var token = '***'; //テスト1 31 var op = 32 { 33 "method" : "post", 34 "Content-Type" : "application/x-www-form-urlencoded", 35 "payload": "message=" + message, 36 "headers":{"Authorization" : "Bearer " + token} 37 }; 38 var res = UrlFetchApp.fetch("https://notify-api.line.me/api/notify",op); 39 Logger.log(JSON.parse(res.getContentText())); //Response 40} 41

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

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

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

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

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

guest

回答1

0

ベストアンサー

--<2回目の回答>--
報告対象日の設定があるので、
セクション名のところの if 文は、

} else if (item.includes("【") && item.includes("】")) {

とします。
そして value が 0 だったときには、
何も表示しないのであれば、以前にやっていたように
その後の処理を中断して繰り返し処理を続けます。

forループを次のようにしてみてください。

javascript

1 for (var i = 3; i <= column; i++) { 2 var item = range.getCell(1, i).getValue(); //1行目 3 var value = range.getCell(row, i).getValue(); //最終行 4 if (item == "報告対象日") { 5 var date = new Date(value) 6 var weeks = ["日", "月", "火", "水", "木", "金", "土"]; 7 var weekstr = weeks[date.getDay()]; 8 var ymd = Utilities.formatDate(date, "Asia/Tokyo", "MM/dd"); 9 value = ymd + "(" + weekstr + ")" 10 } else if (item.includes("【") && item.includes("】")) { 11 value = ""; 12 } else { 13 if (value == 0) { 14 continue; 15 } else { 16 item += " / "; 17 } 18 } 19 message += "\n" + item + value + "\n"; 20 }

当方で動作確認(LINEに送らず、messageをログ出力)したところ
報告1 報告2 報告3 のうち報告2を0にしたところ

報告対象日04/02(日)

【セクション名】

報告1 / 3

報告3 / 2

と表示されました。

--<当初の回答>--
セクション名が
【セクション】
のように【と】に挟まれていて、通常の質問項目には【も】もどちらもつかないのでしたら、
item が【を】含むときは、valueを空白にするといいのではないでしょうか。

if (!value) {continue};
の行を削除して
for ループを次のように変更すると希望どおりになりますでしょうか。

javascript

1for(var i=2;i<=column;i++){ 2 var item = range.getCell(1, i).getValue(); //1行目 3 var value = range.getCell(row, i).getValue(); //最終行 4 if (item.includes("【") && item.includes("】")) { 5 value = ""; 6 } else { 7 item += " / "; 8 } 9 message += "\n"+item + value+"\n"; 10}

投稿2023/03/31 21:38

編集2023/04/02 08:07
YellowGreen

総合スコア731

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

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

umimuk

2023/04/01 12:41 編集

回答ありがとうございます。 そちらの内容で修正したところ、0はつかなくなったのですが、実際の回答に0があった場合、その回答は省きたい場合はどうするべきでしょうか? 質問の方に修正後のコードとLINEに送信されたものを追加でアップロードしてますのでご確認ください。
YellowGreen

2023/04/02 08:08

当初の回答に2回目の回答を追加しました。 お試しください。
YellowGreen

2023/04/02 08:10

なお、 value = ymd + "(" + weekstr + ")" のところは、個人的には、 value = ": " + ymd + "(" + weekstr + ")" としたいところです。 報告対象日: 04/02(日) と表示されます。
umimuk

2023/04/02 12:05

確認しました。 完璧です…!!!本当にありがとうございます!! 思った通りのものになりほんとに助かりました! value = ymd + "(" + weekstr + ")" のところも、私もその表示のほうがいいと思うので、そちらも修正致しました。 ありがとうございました!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問