###前提・実現したいこと
今、実験環境づくりのためSlackというアプリに対して、スプレッドシート内の記された発言内容を時間ごとに発言するというプログラムをつくっています。(言語はJava Scriptを主としたGoogle App Scriptです)
スプレッドシート内では1列目に言葉2列目に時間に相当する数字がしるされています。
計っている時間と2列目の数字が一致すれば1列目の発言内容がSlackに投稿されるという形をかんがえています。
時間計測はfor文中に毎回1秒ずつsleepをかけることで実現しようとしています。
###発生している問題・エラーメッセージ
TypeError: undefined からプロパティ「(class)@ecc7b67」を読み取れません。(行 40、ファイル「mainfunc」)
と関数matchの部分のif文条件式でエラーが出てしまいます。おそらく2重配列部分で何か引っかかっているのではとおもいましたがどうしたらいいかわかりません。
###該当のソースコード
//スプレッドシート読み込みの作業をここで行う。 //実験が変わる場合にシート番号を変える必要あり!! function Script() { //取り扱いたいスプレッドシートURL var spreadSheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1xwW9_RlJ1jMk2uKWYwkSCNR9ByOA-CZjIKNTUT4tWPI/edit#gid=0'); //シートを指定ここでは0で1ページ目のシートを対象としています。 var sheet = spreadSheet.getSheets()[0]; //最終行が何行目かを取得 lastline = sheet.getLastRow(); //2重配列でセリフと時間を取得 return sheet.getDataRange().getValues(); } //postSlackMessageでメッセージを送る。ここはうまくいっている。 function postSlackMessage(line) { var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'); var slackApp = SlackApp.create(token); //SlackApp インスタンスの取得 var options = { channelId: "#general", //チャンネル名 userName: "takayukibot", //投稿するbotの名前 message: line //投稿するメッセージ }; slackApp.postMessage(options.channelId, options.message, {username: options.userName}); } //時間とスプレッドシートの値があっているかを確認 function match(num,cou,cell) { //ここで時間が一緒の場合にSlackに対してメッセージを送るようにしている。そして次の行へnumber++ if(cell[num][1] == cou){ postSlackMessage(cell[num][0]); num = num+1; cou = cou+1; postSlackMessage(cell[2][0]); }else{ cou = cou+1; } } function Timer() { var number = 0; var count = 0; var Cell = Script(); //setTimeoutが対応していないので、sleepで1秒ずつ止めてfor文で回す。 for(var i=0;i<=5;i++){ match(number,count,Cell); postSlackMessage(Cell[2][0]); Utilities.sleep(1000); } }
###試したこと
cell部分をグローバル変数等にしてみましたが、どうにもできずおてあげじょうたいです。
###補足情報(言語/FW/ツール等のバージョンなど)
言語:Google apps script
スプレッドシートからのテキストエディターで書き込んでいます。
回答3件
あなたの回答
tips
プレビュー