
こちらの質問にて、関数のパラメータを取得し、
それを利用するスクリプトを書くことに成功しました。
そのことが関係あるのかどうかわからないのですが、
もともと1秒かそこらで完了していたこのスクリプトが、
なぜか完了までに90秒ぐらいかかるようになりました。
特に思い当たる節がないのですが、なにかあるのだと思います。
そこで、詳しい方なら、コードとログを見れば、
ボトルネックを見つけていただくことができるのではないかと考え、この記事を投稿します。
丸投げと言われるかもしれないとも思いましたが、本当に原因がわからないのです。
丸投げのつもりはないと明記しておきます。
以下、コードと実行トランスクリプトです。
実行トランスクリプトを見ると、「getLastRow()」「getValue()」が実行されたとき、
やたらと時間を食っている、というところまでは分析できました。
javaScript
1function zenbu(e){ 2 var sheetName = e.source.getSheetName(); 3 Logger.log(sheetName); 4 // 生ログに変更のあったときのみ動かす 5 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 6 var sheet_nama = spreadsheet.getSheetByName('生ログ'); 7 var sheet_henkou = spreadsheet.getActiveSheet().getSheetName(); 8 Logger.log(sheet_henkou); 9 var lastRow_nama = sheet_nama.getLastRow(); 10 var tweet_nama = sheet_nama.getRange(lastRow_nama,2).getValue(); 11 Logger.log(tweet_nama); 12 if((sheetName=="生ログ")&&(tweet_nama.match(/.*を読んでいる本に追加.*/))){ 13 seikei(); 14 } 15 time(); 16} 17 18function seikei() { 19 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 20 var sheet_nama = spreadsheet.getSheetByName('生ログ'); 21 var sheet = spreadsheet.getSheetByName('読書リスト'); 22 var sheet_memo = spreadsheet.getSheetByName('メモ'); 23 var lastRow_nama = sheet_nama.getLastRow(); 24 var tweet_nama = sheet_nama.getRange(lastRow_nama,2).getValue(); 25 // タイトルと著者部分 26 var reg3 = "【(.*)】"; 27 var title_hissya_nama = sheet_nama.getRange(lastRow_nama,2).getValue().match(reg3)[1]; 28 Logger.log(title_hissya_nama); 29 // タイトルの抽出 30 var lastRow = sheet.getLastRow(); 31 var title = sheet.getRange(lastRow+1,2); 32 var reg = "^(.*?)/"; 33 if(title_hissya_nama.match(reg)){ 34 var title_nama = title_hissya_nama.match(reg)[1]; 35 Logger.log(title_nama); 36 title.setValue(title_nama); 37 } 38 else{ 39 title.setValue(title_hissya_nama); 40 } 41 // 著者の抽出 42 var hissya = sheet.getRange(lastRow+1,3); 43 var reg2 = "/(.*?)$"; 44 if(title_hissya_nama.match(reg2)){ 45 var hissya_nama = title_hissya_nama.match(reg2)[1]; 46 Logger.log(hissya_nama); 47 hissya.setValue(hissya_nama); 48 } 49 else{ 50 hissya.setValue(""); 51 } 52 // 冊数を記入 53 var lastRow_val = sheet.getRange(lastRow,1).getValue(); 54 Logger.log(lastRow_val); 55 var count = sheet.getRange(lastRow+1,1); 56 count.setValue(lastRow_val+1); 57 // Googleカレンダー用成形 58 var google = sheet.getRange(lastRow+1,11); 59 if((hissya_nama!=" ")&&(title_hissya_nama.match(///))){ 60 google.setValue(title_nama + " / " + hissya_nama + "【読書メモ】"); 61 } 62 else{ 63 google.setValue(title_nama + "【読書メモ】"); 64 } 65 // 出版社 66 var pub = sheet.getRange(lastRow+1,4); 67 pub.setFormula("=VLOOKUP(B"+(lastRow+1)+",'メモ'!B:F,3,)"); 68 // 出版日時 69 var pub_day = sheet.getRange(lastRow+1,5); 70 pub_day.setFormula("=VLOOKUP(B"+(lastRow+1)+",'メモ'!B:F,4,)") 71 // ページ数 72 var page = sheet.getRange(lastRow+1,9); 73 page.setFormula("=VLOOKUP(B"+(lastRow+1)+",'メモ'!B:F,5,)") 74} 75 76function time() { 77 // かかった時間 78 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 79 var sheet = spreadsheet.getSheetByName('読書リスト'); 80 var lastRow = sheet.getLastRow(); 81 var time = sheet.getRange(lastRow,8); 82 if(sheet.getRange(lastRow,7).getValue() != ""){ 83 var time_start = new Date(sheet.getRange(lastRow,6).getValue()); 84 Logger.log(time_start); 85 var time_end = new Date(sheet.getRange(lastRow,7).getValue()); 86 Logger.log(time_end); 87 var time_diff = ((time_end-time_start)/(1000*60*60*24)); 88 Logger.log(time_diff); 89 time.setValue(time_diff); 90 // 1日あたり 91 var by1day = sheet.getRange(lastRow,10); 92 var page = sheet.getRange(lastRow,9).getValue(); 93 by1day.setValue(page/time_diff); 94 } 95}
[18-05-21 09:36:50:491 PDT] Session.getActiveUser() [0 秒] [18-05-21 09:36:50:491 PDT] User.getEmail() [0 秒] [18-05-21 09:36:50:491 PDT] SpreadsheetApp.getActiveSpreadsheet() [0 秒] [18-05-21 09:36:50:501 PDT] 実行を開始しています [18-05-21 09:36:50:508 PDT] SpreadsheetApp.getActiveSheet() [0 秒] [18-05-21 09:36:50:690 PDT] Spreadsheet.getSheetName() [0.081 秒] [18-05-21 09:36:50:691 PDT] Logger.log([生ログ, []]) [0 秒] [18-05-21 09:36:50:692 PDT] SpreadsheetApp.getActiveSpreadsheet() [0 秒] [18-05-21 09:36:50:692 PDT] Spreadsheet.getSheetByName([生ログ]) [0 秒] [18-05-21 09:36:50:693 PDT] Spreadsheet.getActiveSheet() [0 秒] [18-05-21 09:36:50:693 PDT] Sheet.getSheetName() [0 秒] [18-05-21 09:36:50:693 PDT] Logger.log([生ログ, []]) [0 秒] [18-05-21 09:37:00:292 PDT] Sheet.getLastRow() [9.598 秒] [18-05-21 09:37:00:293 PDT] Sheet.getRange([21, 2]) [0 秒] [18-05-21 09:37:10:402 PDT] Range.getValue() [10.108 秒] [18-05-21 09:37:10:402 PDT] Logger.log([【〆切本/夏目漱石他】を読んでいる本に追加 → https://t.co/EGYIJFogC4 #bookmeter, []]) [0 秒] [18-05-21 09:37:10:403 PDT] SpreadsheetApp.getActiveSpreadsheet() [0 秒] [18-05-21 09:37:10:404 PDT] Spreadsheet.getSheetByName([生ログ]) [0 秒] [18-05-21 09:37:10:404 PDT] Spreadsheet.getSheetByName([読書リスト]) [0 秒] [18-05-21 09:37:10:405 PDT] Spreadsheet.getSheetByName([メモ]) [0 秒] [18-05-21 09:37:20:533 PDT] Sheet.getLastRow() [10.127 秒] [18-05-21 09:37:20:533 PDT] Sheet.getRange([21, 2]) [0 秒] [18-05-21 09:37:20:534 PDT] Range.getValue() [0 秒] [18-05-21 09:37:20:534 PDT] Sheet.getRange([21, 2]) [0 秒] [18-05-21 09:37:20:535 PDT] Range.getValue() [0 秒] [18-05-21 09:37:20:535 PDT] Logger.log([〆切本/夏目漱石他, []]) [0 秒] [18-05-21 09:37:31:106 PDT] Sheet.getLastRow() [10.57 秒] [18-05-21 09:37:31:107 PDT] Sheet.getRange([12, 2]) [0 秒] [18-05-21 09:37:31:108 PDT] Logger.log([〆切本, []]) [0 秒] [18-05-21 09:37:31:109 PDT] Range.setValue([〆切本]) [0 秒] [18-05-21 09:37:31:112 PDT] Sheet.getRange([12, 3]) [0.003 秒] [18-05-21 09:37:31:113 PDT] Logger.log([夏目漱石他, []]) [0 秒] [18-05-21 09:37:31:114 PDT] Range.setValue([夏目漱石他]) [0 秒] [18-05-21 09:37:31:115 PDT] Sheet.getRange([11, 1]) [0 秒] [18-05-21 09:37:51:348 PDT] Range.getValue() [20.232 秒] [18-05-21 09:37:51:348 PDT] Logger.log([9.0, []]) [0 秒] [18-05-21 09:37:51:349 PDT] Sheet.getRange([12, 1]) [0 秒] [18-05-21 09:37:51:349 PDT] Range.setValue([10.0]) [0 秒] [18-05-21 09:37:51:350 PDT] Sheet.getRange([12, 11]) [0 秒] [18-05-21 09:37:51:351 PDT] Range.setValue([〆切本 / 夏目漱石他【読書メモ】]) [0 秒] [18-05-21 09:37:51:351 PDT] Sheet.getRange([12, 4]) [0 秒] [18-05-21 09:37:51:352 PDT] Range.setFormula([=VLOOKUP(B12,'メモ'!B:F,3,)]) [0 秒] [18-05-21 09:37:51:353 PDT] Sheet.getRange([12, 5]) [0 秒] [18-05-21 09:37:51:353 PDT] Range.setFormula([=VLOOKUP(B12,'メモ'!B:F,4,)]) [0 秒] [18-05-21 09:37:51:354 PDT] Sheet.getRange([12, 9]) [0 秒] [18-05-21 09:37:51:355 PDT] Range.setFormula([=VLOOKUP(B12,'メモ'!B:F,5,)]) [0 秒] [18-05-21 09:37:51:355 PDT] SpreadsheetApp.getActiveSpreadsheet() [0 秒] [18-05-21 09:37:51:356 PDT] Spreadsheet.getSheetByName([読書リスト]) [0 秒] [18-05-21 09:38:11:539 PDT] Sheet.getLastRow() [20.182 秒] [18-05-21 09:38:11:539 PDT] Sheet.getRange([12, 8]) [0 秒] [18-05-21 09:38:11:540 PDT] Sheet.getRange([12, 7]) [0 秒] [18-05-21 09:38:21:667 PDT] Range.getValue() [10.126 秒] [18-05-21 09:38:21:669 PDT] 実行が無事終了しました(合計ランタイム 91.06 秒)
自己解決(2018/05/22 13:32)
寝て起きて再びスクリプトを動かしたところ、また1秒程度で動くようになっていました。
解決策「放置」というケースもあるのですね。
それはそれで謎ですが、でもまた「まとも」な範囲の速度で動いてくれるようになったので、
この質問は解決済みとすることにします。お騒がせして申し訳ありません。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/22 04:35