前提・実現したいこと
※当方初心者です。
実現したいことを検索⇒コードのコピペ・改変で何とか乗り切ってきたのですが、エラー発生時の対応が分からずこちらに質問させていただきます。
何卒宜しくお願い致します。
googleスプレッドシートにまとめられている社内の未解決案件を、Google Apps ScriptとslackのAPI連携(incoming Webhook)を使い、毎月決まった日付に特定のslackのチャンネルに投稿したいと考えています。
未解決案件は部署ごとにあり、それぞれ異なるslackのチャンネルに投稿したいと考えています。
■スプレッドシートの内容
a. 未解決案件の番号や期限、担当者の内容等が記載された、部署ごとのシート。
シート1行目はA1セルにシートタイトル。
2行目は各項目の内容(「番号」「期限」「担当」など)。
3行目以下に具体的な案件の一覧が追加・更新されていく。
1・2行目までのフォーマットは全部署共通。
各シートの名前は部署名(営業1課、営業2課など)を記載。
b. aの各シート名(営業1課、営業2課など)と、slack投稿先のチャンネルのURLを紐付けるシート。
シート1行目は各項目の内容。
1列目「aのシート名」
2列目「投稿先のslackチャンネル名」
3列目「投稿先のslackチャンネルのURL」
4列目「各営業部のslackユーザーグループメンション」
シート2行目以下に、具体的なaのシート名や、それに紐づくURL等の情報を記載しています。
最終的に、Google Apps Script上で日付ベースのトリガーを設定し、
期日になったら、bシートで設定したslackの各部署ごとのチャンネルに、
各aシートの詳細一覧が投稿されるのが理想です。
発生している問題・エラーメッセージ
undefined からプロパティ「1」を読み取れません。 ※エラー箇所としては 52行目 createMessagetest 6行目 main との付記がありました。
該当のソースコード
Google Apps Script
function main(){ var sheet_to = SpreadsheetApp.openById('【スプレッドシートのID】').getSheetByName('【bのシート名】'); // var row_to = sheet_to.getDataRange().getLastRow(); var address = sheet_to.getRange(2,1,row_to-1,4).getValues(); var message = createMessagetest(row_to-2,address); sendMessagetest(row_to-2,address,message); } function sendMessagetest(rr,aa,m) { //Webhook URLを以下に入力 for(i=0;i<=rr;i++){ const sendMessage = m[i][1]; const jsonData = { "text": sendMessage, "username" : "【bot名】", "icon_emoji" : ":loudspeaker:", }; const payload = JSON.stringify(jsonData); const options = { "method": "post", "contentType": "application/json", "payload": payload }; if (aa[i][0] == m[i][0]){ UrlFetchApp.fetch(aa[i][2], options); } } } function createMessagetest(r,a) { const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var output = []; for(i=0;i<=r;i++){ var sheet = spreadsheet.getSheetByName(a[i][0]); const dataObject = new Date(); const today = Utilities.formatDate(dataObject, "JST", "MM/dd"); const columnFVals = sheet.getRange('A:A').getValues(); //A列の値を配列で取得 const lastRow = columnFVals.filter(String).length; //空白を除き、配列の数を取得 var taskList = ""; //タスクリスト for (row = 3; row <= lastRow; row++) { var Datas=sheet.getDataRange().getValues(); var status = Datas[row-1][1]; var number = Datas[row-1][0]; var customer = Datas[row-1][2]; var place = Datas[row-1][3]; var item = Datas[row-1][4]; var price = Datas[row-1][5]; var delivery_date = Datas[row-1][7]; var charge = Datas[row-1][8]; var storage = Datas[row-1][9]; // if(Date.prototype.isPrototypeOf(delivery_date)){ // delivery_date = Utilities.formatDate(delivery_date, "JST", "MM/dd"); // } //こちらについては今回のエラーには関係ないため、一旦コメント化させていただきます。 //taskListの生成 taskList = taskList + "【" + status + "】" + "\n◆担当:" + charge + " ◆納期:" + delivery_date + "\n顧客名:" + customer + "(" + number + ")" + "\n会場:" + place + " 総額:" + price + "円\n商品:" + item + "\n保管:" + storage + "\n\n"; } //最終的な出力の生成 output.push([a[i][0],String(a[i][3]) + "\n" + today + "時点の未解決案件はありません。ありがとうございます。"]) } else { output.push([a[i][0],String(a[i][3]) + "\n" + today + "時点の未解決案件リストです。\n*各案件への進捗報告、お願い致します。*\n========\n" + "```\n" + taskList + "```\n"]); } } //Logger.log(output); return output; }
試したこと
bシートに記載する部署・投稿先を1部署分のみ(2行目の1行のみ)にしたところ、エラーの発生なく投稿できました。
ただ行を増やし複数シート・投稿先を記載すると、上記のようなエラーが発生します。
回答1件
あなたの回答
tips
プレビュー