「編集のあったセルのあるシートのシート名」を取得して、
そのシート名が特定のシート名と一致したらスクリプトを動作させる、
という条件を書きたいと思いました。
以前私が投稿したこちらの質問にて、
onEdit(e)を使い、編集のあったセルのあるシートのシート名を取得する方法を教わりました。
上記の記事の質問文では書いていませんが、
「編集」というのが「IFTTTによる書き込み」である場合、onEditは動かないのでしょうか。
書いたスクリプトの動作の様子をしばらく観察していたところ、
どうやら動いていないような気がしました。
プロジェクトの「すべての実行」を確認しても、
おそらくIFTTTからデータが来たと思われるタイミングで、
ステータスが「失敗しました」となっているように思います。
ちなみに、手動でデータをコピペした場合は、「編集した」と認識してくれるようです。
解決策としては、関数名をイベントハンドラではない名前にして、
スクリプトエディタからトリガーを「値の変更時」に設定すればよいのだとは思いますが、
その場合、onEdit(e)のeの部分は定義?できないのでしょうか。
仮に「function zenbu(e)」という名前で、
トリガーを「値の変更時」に設定して試したところ、実行に失敗するようです。
ちなみに、「function onEdit(e)」という名前で、
トリガーを「値の変更時」に設定した場合でも同様でした。
追記(2018/05/20 20:50)
このようなスクリプトとなっております。
トリガーを設定してもしなくても、IFTTTからのデータ取得時にエラーとなります。
パラメータを設定しているところがネックとなっているような気がします。
【2018/05/21 0:55 訂正】
onEdit(e)を使った場合は、IFTTTからデータを取得した際、
実行トランスクリプトにもログにも記録がないように思われます。
javaScript
1function onEdit(e){ 2 var range = e.range; 3 var sheetName = range.getSheet().getName(); 4 Logger.log(sheetName); 5 // 生ログに変更のあったときのみ動かす 6 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 7 var sheet_nama = spreadsheet.getSheetByName('生ログ'); 8 var lastRow_nama = sheet_nama.getLastRow(); 9 var tweet_nama = sheet_nama.getRange(lastRow_nama,2).getValue(); 10 Logger.log(tweet_nama); 11 if((sheetName=="生ログ")&&(tweet_nama.match(/.*を読んでいる本に追加.*/))){ 12 seikei(); 13 } 14 time(); 15}
追記2(2018/05/21 0:30)
以下のスクリプトで、トリガーを「値の変更時」にすると、期待通りの動作をします。
javaScript
1function zenbu(){ 2 // 生ログに変更のあったときのみ動かす 3 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 var sheet_nama = spreadsheet.getSheetByName('生ログ'); 5 var sheet_henkou = spreadsheet.getActiveSheet().getSheetName(); 6 Logger.log(sheet_henkou); 7 var lastRow_nama = sheet_nama.getLastRow(); 8 var tweet_nama = sheet_nama.getRange(lastRow_nama,2).getValue(); 9 Logger.log(tweet_nama); 10 if((sheet_henkou=="生ログ")&&(tweet_nama.match(/.*を読んでいる本に追加.*/))){ 11 seikei(); 12 } 13 time(); 14}
回答1件
あなたの回答
tips
プレビュー