質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

Q&A

解決済

1回答

7652閲覧

GASでのステップ実行ついて

fuku-chann

総合スコア82

Google Apps Script

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

0グッド

2クリップ

投稿2020/05/02 14:29

GASでデバックするときに、ステップ実行を使って一行ずつコードを確認していますが、ステップ実行の時にスプレッドシートを見ながら一行ずつコードを実行していくことはできますでしょうか?
スプレッドシートに特定のGmailを抜き出しています。

function contact_Gmail() { var rowNumber = 2; var mysheetname = 'Gmail解析_' + DateString(new Date()); var GmailSS = SpreadsheetApp.create(mysheetname); var mySheet = GmailSS.getSheets()[0]; mySheet.setName(mysheetname); mySheet.getRange(1,1).setValue("日時"); mySheet.getRange(1,2).setValue("送信元"); mySheet.getRange(1,3).setValue("件名"); mySheet.getRange(1,4).setValue("本文"); mySheet.getRange(1,5).setValue("ご予約"); mySheet.getRange(1,6).setValue("お名前"); mySheet.getRange(1,7).setValue("電話番号"); mySheet.getRange(1,8).setValue("メールアドレス"); var newfolder = DriveApp.createFolder(mysheetname); var searchQuery = 'subject:(”予約が確定" OR "finalized") '; var threads = GmailApp.search(searchQuery, 0, 200); var mymsg=[]; var msgs = GmailApp.getMessagesForThreads(threads); for(var i = 0; i < msgs.length; i++) { mymsg[i]=[]; for(var j = 0; j < msgs[i].length; j++) { mymsg[i][0] = msgs[i][j].getDate(); mymsg[i][1] = msgs[i][j].getFrom(); mymsg[i][2] = msgs[i][j].getSubject(); var nbsp = String.fromCharCode(160); mymsg[i][3] = msgs[i][j].getPlainBody().replace(/<("[^"]*"|'[^']*'|[^'">])*>|nbsp/g,'').replace(/&; | /g,'').substring(0,50000); // mymsg[i][4] = msgs[i][j].getPlainBody() } } if(mymsg.length>0){ GmailSS.getSheets()[0].getRange(2, 1, i, 5).setValues(mymsg); //シートに貼り付け } } function DateString(date){ return date.getFullYear().toString() + date.getMonth().toString() + date.getDate().toString() + date.getHours().toString() + date.getMinutes().toString() + date.getSeconds().toString(); };

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

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

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

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

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

y_waiwai

2020/05/02 14:38

実際にやってみてできるんでしょうか
fuku-chann

2020/05/02 14:49

7_waiwai様 ご回答ありがとうございます。 ステップ実行だけならできますが、スプレッドシートを見ながらやる方法がわかりません。。。
guest

回答1

0

ベストアンサー

Range.setValue()はスプレッドシート側にリアルタイムに反映されないようです。
色々試した結果、GAS側のプログラム呼び出しが終了した後に操作結果がまとめて更新されるようです。

実際に以下のコードを実行してみましたが、ブレークポイント1、2のそれぞれの時点で別ウインドウのスプレッドシート上でページの再読み込みしても更新結果は反映されていませんでした。

ブレークポイント1の箇所で停止中に、手動でスプレッドシートのセルを変更した後、コードの実行を継続すると、関数の終了後に処理結果が反映されるので、スプレッドシートへの操作はキャッシュされていて、プログラム終了時に一括で反映されるのでしょう。スプレッドシートの変更履歴も手動での変更の後にGASでの変更になっていました。

JavaScript

1function myFunction() { 2 const fileId = "......"; 3 const file = SpreadsheetApp.openById(fileId); 4 const sheet = file.getSheets()[0]; 5 6 for(let row = 1; row <= 2; row++) { 7 for(let col = 1; col <= 2; col++) { 8 sheet.getRange(row, col).setValue(`${row}-${col}`); 9 Utilities.sleep(1000); //ブレークポイント1 10 } 11 } 12 Utilities.sleep(1000); //ブレークポイント2 13}

投稿2020/05/02 19:02

draq

総合スコア2573

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

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

fuku-chann

2020/05/06 03:00

draq様 遅くなりましたがご回答ありがとうございました。 GASではステップ実行はないようですね。 VScodeやAtomでできたりするのでしょうか。。。
draq

2020/05/06 07:07

GASにステップ実行が無いのではなく、GASに実装されているスプレッドシート操作用APIがジョブ完了後に反映する実装になっているだけでしょう。 Google Sheets APIをUrlFetchApp使って直接呼び出せば変更をリアルタイムに反映できるのかもしれませんが、問題が多すぎるので全くおすすめしません。
fuku-chann

2020/05/06 08:08

了解しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問