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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

Q&A

1回答

6826閲覧

特定の処理の際にタイムアウトになる

oniorn

総合スコア0

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

0グッド

0クリップ

投稿2021/05/23 09:50

閲覧ありがとうございます。

タイムアウトの解消がしたい

GoogleAppsScript で在庫管理をしており、未販売分を抽出して「●●日未販売分」というシートにまとめるスクリプトを書いており、実際に業務に使用しておりました。
元々全くエラーを吐いていませんでしたが、いつからか実行すると特定の処理の際にタイムアウトするようになりました。
解決方法を教えていただけますと幸いです。
よろしくお願いいたします。

発生している問題・エラー

Exception: ドキュメント(#######)にアクセス中に スプレッドシート のサービスがタイムアウトしました。(行 28、…)

ドキュメントのidはgetActiveSpreadsheetで取得したアクティブなスプレッドシートのidです。

「●●日未販売分」シート(コード上ではzaikoシートと表記)がないとき問題なくすべての処理を完遂するのですが、
「●●日未販売分」シートがあり、一度そのシートを削除して改めて作成した際に数秒でタイムアウトになります。

該当するソースコード

var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getActiveSheet(); var day = new Date().getDate(); //すでにzaikoシートが追加されている場合 try{ var zaiko = ss.getSheetByName(day + '日未販売分'); //tryの部分 zaikoシートが無ければ動かずエラーになる為catchへ zaiko.setColumnWidth(1, 230); //zaikoシートがあれば削除して取得するか確認 var result = Browser.msgBox(day + '日未販売分シートを削除して取得しますか?',Browser.Buttons.YES_NO); if(result == 'no'){ Browser.msgBox(day + '日未販売分シートの名前を変更して再度実行してください'); return; }else if(result == 'yes'){ //zaikoシート削除 ss.deleteSheet(zaiko); } }catch(e){ } //今回の未販売分のビットを張り付けるシートを作成 ss.insertSheet(day + '日未販売分');  ////問題の発生している行(行 28) var zaiko = ss.getSheetByName(day + '日未販売分');

自分で試したこと

・問題の発生している行をコメントアウト
→その次の行でタイムアウト
・deleteSheet削除
→タイムアウトは起きない(ss.insertSheet(day + '日未販売分');にて名前が被るためエラー)
→deleteSheet起因?
・共有しているPCをすべてログアウトして実行
→事象変わらず
・同じエラーの記事(https://teratail.com/questions/320623 )を参考に行数を削除
事象変わらず

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

tryCatchを使用するときはエラーの処理も行うことをおすすめします!
なぜエラーが発生しているか確認しておかないと、問題の解決や大きなトラブルの原因となる場合もありますので。。。

今回の場合は、sheetがない場合は、nullが返ってくるので、if文が適しています。

エラーに関しては、実態試していないのでなんとも言えませんが、
zeikoシートがあった場合に削除を行う場合と行わない場合があると思いますが、
削除を行わない場合は、insertSheetでエラーが発生して止まるからかもしれません。

行う場合も、シートへの直接の処理(読み書き・シートの作成・削除など)に時間がかかるため、
削除したつもりでも、削除中の状態で同じ名前のシートを作成する状態となってしまうため、こちらも削除になっている可能性があります。

同じ日付のシートを削除して、また作り直す必要性は、あまり内容に感じますので、
zaiko.clear()でシートの内容を消去しまた使われるのがいいかと思います。

gas

1 var ss = SpreadsheetApp.getActiveSpreadsheet(); 2 var sh = ss.getActiveSheet(); 3 var day = new Date().getDate(); 4 5  //すでにzaikoシートが追加されている場合 6 var zaiko = ss.getSheetByName(day + '日未販売分'); 7 if(zaiko){ 8    //zaikoシートがある場合の処理 9 10 } 11

投稿2021/05/24 00:26

Tatsunosuke

総合スコア599

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

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

oniorn

2021/05/24 04:02 編集

回答ありがとうございます! おかげさまで現在は問題なく復旧しています。 "シートへの直接の処理(読み書き・シートの作成・削除など)に時間がかかる"という点について勉強になりました。 確かに冷静になって考えてみれば.clearの方がいいですね。 ただ、一応作成してから半年ほどは何も問題なく動いていましたので何起因で発生しているのか気になります…
Tatsunosuke

2021/05/24 12:24

お役に立てたようでよかったです! GOOGLEの気まぐれなのか、前回はいけたけど、今回はだめはダメがたまにあるんですよね。。。 GOOGLEの負荷も増えてきていると思うので、エラー出たら即停止!ってふうに仕様が変わったのかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問