🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

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

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

Q&A

解決済

1回答

3210閲覧

GAS:スプレッドシートに記述後、特定の条件でチャットワークに送信される

usakara

総合スコア1

Google スプレッドシート

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

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

0グッド

0クリップ

投稿2021/01/20 15:55

前提・実現したいこと

はじめてGASを利用して作成しはじめました。
やりたい事は以下の通りです。
(1)スプレッドシートを共有した各人がシートに記述する
(2)記述した行のプルダウンが「送信する」だったら、特定の周期でチャットワークのグループに送信される
(3)送信された際に、送信日時を付けて終了
特定の周期はコード記述後にトリガーで設定できそうなので、それはコードに含まない予定です。

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

logでシート名の取得が出来ている事までが確認できました。
主に参照したリンク
出来ずに困っているのは、forとifの部分です。
参照したリンク先では日時で予約投稿をしているようでしたが、正直全く分かりませんでした。

該当のソースコード

わたしが作った、現状のコードになります。

function myFunction() { var SHEET = SpreadsheetApp.getActiveSpreadsheet(); var DB = SHEET.getSheetByName('DB'); var TEXT = SHEET.getSheetByName('案一覧'); // シート(DB)のトークン(A2)を取得 var DB_TOKEN = DB.getRange('A2'); var TOKEN = ChatWorkClient.factory({token: DB_TOKEN}); // シート(DB)のルームID(B2)を取得 var ROOM_ID = DB.getRange('B2'); // シートを最初から最後まで見る var LASTROW_TEXT = TEXT.getLastRow(); for (let i = 2; i <= LASTROW_TEXT; i++) { // シート(案一覧)の指定行の列が「送信する(E2~)」かつ「chat送信日時(H2~)」が空欄だったら // if ( () && () ) { // 送信する行の記入者名(C2~)をシートから取得 var NAME = '名前'; // 送信する行のテキスト(F2~)をシートから取得 var TEXT = 'テキスト'; // 送信する行の備考(G2~)をシートから取得 var POINT = 'URL'; // 送信する行からbodyを生成する var BODY = '[info][title]'; BODY += NAME; BODY += 'さん[/title]'; BODY += TEXT; BODY += '[hr]'; BODY += POINT; BODY += '[/info]'; // ルームIDにメッセージを送信する TOKEN.sendMessage({room_id:ROOM_ID, body:BODY}); // 最後にchat送信日時(H2~)に送信した日時を記録する // } } }

試したこと

直入力の情報で送信、チャットワークでの受信を確認できました。
スプレッドシートに送信した日時を書き込むところはまだ全く分かっていません。

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

GASは現在の最新になっているかと思います。
以前のエディタに変更しないと、チャットワークのライブラリが設定できず苦戦しました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

テストしてないですが、こんな感じですかね。

js

1function myFunction() { 2 const SENDDATE = new Date(); 3 var SHEET = SpreadsheetApp.getActiveSpreadsheet(); 4 var DB = SHEET.getSheetByName('DB').getDataRange().getValues(); 5 var TEXT_RANGE = SHEET.getSheetByName('案一覧').getDataRange(); 6 var TEXT = TEXT_RANGE.getValues(); 7 8 9 // シート(DB)のトークン(A2)を取得 10 var DB_TOKEN = DB[0][1]; 11 var TOKEN = ChatWorkClient.factory({token: DB_TOKEN}); 12 // シート(DB)のルームID(B2)を取得 13 var ROOM_ID = DB[1][1]; 14 15 // シートを最初から最後まで見る 16 for (const row of TEXT) { 17 // シート(案一覧)の指定行の列が「送信する(E2~)」かつ「chat送信日時(H2~)」が空欄だったら 18 if (row[4] === '送信する' && row[7] === '') { 19 // 送信する行の記入者名(C2~)をシートから取得 20 var NAME = row[2]; 21 // 送信する行のテキスト(F2~)をシートから取得 22 var TEXT = row[5]; 23 // 送信する行の備考(G2~)をシートから取得 24 var POINT = row[6]; 25 26 // 送信する行からbodyを生成する 27 var BODY = '[info][title]'; 28 BODY += NAME; 29 BODY += 'さん[/title]'; 30 BODY += TEXT; 31 BODY += '[hr]'; 32 BODY += POINT; 33 BODY += '[/info]'; 34 35 // ルームIDにメッセージを送信する 36 TOKEN.sendMessage({room_id:ROOM_ID, body:BODY}); 37 38 // 最後にchat送信日時(H2~)に送信した日時を記録する 39 row[7] = SENDDATE; 40 } 41 } 42 TEXT_RANGE.setValues(TEXT); 43}

投稿2021/01/20 23:14

macaron_xxx

総合スコア3191

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

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

usakara

2021/01/21 11:26

ありがとうございます! そのままではエラーが出てしまいましたが、トークンの読み取りセルの指示を直したら送ることができ、日時も記述されました! 書いて頂いた部分、見直してまた作ってみます。この度は本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問