🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google Apps Script

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

Q&A

解決済

1回答

1331閲覧

トリガー実行時に当該スプレッドシートを開くと書き込み動作に抜け漏れが発生

kingston02

総合スコア0

Google Apps Script

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

0グッド

0クリップ

投稿2021/01/14 16:25

編集2021/01/15 13:51

前提・実現したいこと

GAS&スプレッドシートでクローリングとスクレイピングをトリガー実行しています。

発生している問題・エラーメッセージ

動作におおよそに問題はないのですが、トリガー実行時に当該スプレッドシートを開いた時、シート書き込みに抜け漏れが生じることがあるとわかりました。対策のアイディアをいただけないでしょうか。

スクリプトの内容は次の通りです。
0. シート内で既定した巡回URLと巡回方法を読み込み
0. Parserライブラリ経由で今回取得データをシート内に一時保存
0. シート内で既存データと今回取得データを重複チェック後、新規追加データがあれば書き込み。
0. 新規追加データがあればメール通知

可否を調べていませんが、当該ファイルの閲覧を一時的にロックできたとしても、スクリプトが完遂しないとロックしたまま解除されないといった問題がありそうです。

消極的な回避策として、トリガー実行を深夜帯のみにすることも視野に入れています。

提案・意見などありましたらご教示ください。


2021/01/15 11:17追記

10ほどのサイトをトリガー実行で巡回。
共通処理はライブラリ化(下記コードの関数はライブラリ内にある)。
これまでエディタ実行、トリガー実行をそれぞれ15回 x 10サイト回しており、全て成功。

一度だけ、トリガー実行中に当該スプレッドシートを開き、添付コードの箇所でのシート書き込みに一行の抜けが生じました。処理は最後まで完遂しています。
当時itemListに格納していたデータ量は150行、テキスト形式ファイルにして200KB程度です。
スプレッドシート内のReportシートには700行、テキスト形式ファイルにして500KB程度のデータが存在します。

function myTemp(itemList, settings) { //itemList 連想配列 今回取得データを格納 //連想配列 書き込み先のシートや範囲などの情報を格納 //Tempシート 今回取得データを、重複チェックのため一時記録 //Reportシート 全データを蓄積 //Tempシート初期化 settings.sheet.temp.clear() //配列から挿入 itemList.forEach(function(x){ x.forEach(function(y){ let rowLast = settings.sheet.temp.getLastRow() let rowWrite = rowLast + 1 for(let i = 0; i <= y.length -1; i++) { settings.sheet.temp.getRange(rowWrite, i+1).setValue(y[i]) } }) }) //行末に重複チェック用の数式(COUNTIFS)を挿入 割愛 //重複データが存在する行を削除 割愛 } --- 2021/01/15 22:49追記 根本的な解決にはなっていませんが、処理の高速化を兼ね、シート書き込み回数を減らすことで回避することにしました。 コメントをくださった方がいるので、しばらく回答オープンにしておきます。

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

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

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

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

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

macaron_xxx

2021/01/14 23:18

コードがないと、なんともいえないでしょ。
kingston02

2021/01/15 02:28

コメントありがとうございます。追記しました。 素人頭ですが、エディタ実行、トリガー実行(実行中にファイルを開かず)では何ら問題がないため、部分的な問題というよりは、根本的に処理の流れを変えたほうがいいのかと思いまして。 トリガー実行中で処理中のファイルを人為的に開くことが負荷となり、書き込み抜けの原因となるということは考えられますか?
guest

回答1

0

自己解決

2021/01/15 22:49追記の内容に加え、トリガー実行時間を深夜にすることで回避することにしました。

投稿2021/02/15 06:36

kingston02

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問