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

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

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

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

Q&A

1回答

1555閲覧

GASで手動実行とトリガー実行で動作の挙動が異なる現象が起きています

fuku-chann

総合スコア82

Google Apps Script

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

0グッド

0クリップ

投稿2023/01/05 10:42

編集2023/01/06 01:40

スプレッドシートで任意のシートをアクティブにしようとすると、手動で実行したときとトリガーで時間主導型で実行した時の挙動が異なります。
手動では問題なく任意のシートがアクティブになりますが、トリガーではアクティブになりません。手動実行もトリガーもシートのアクティブの状態だけが異なるだけで、両方ともA1には成功の文字が入力され、ステータスも完了になっております。
トリガーで実行した場合におきましても、4行目のコードでシート1のコピーという名前のシートをアクティブにしたいです。
原因がわかる方おられましたらご教示お願いいたします。

Typescript

1function myFunction1() { 2 var spreadsheet = SpreadsheetApp.getActive(); 3 spreadsheet.getRange('A1').setValue('成功'); 4 spreadsheet.setActiveSheet(spreadsheet.getSheetByName('シート1 のコピー'), true); 5 spreadsheet.getRange('A1').setValue('成功'); 6};

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

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

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

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

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

YAmaGNZ

2023/01/05 10:56 編集

エディタの場合は開いているスプレッドシートが対象になっていて トリガーで起動したときは、別で開いて処理しているとかじゃないですかね? だから、別で開いているもののアクティブは変化しないという感じに思えます。
fuku-chann

2023/01/05 11:15

コメントありがとうございます。 どうしたらアクティブにすることができますでしょうか?
YAmaGNZ

2023/01/05 11:45

何がしたいのでしょうか?
fuku-chann

2023/01/05 11:50

4行目のコードでシート1のコピーという名前のシートをアクティブにしたいです。
YAmaGNZ

2023/01/05 12:08

このスプレッドシートを開いたときにシート1のコピーという名前のシートをアクティブにしたいのですか? もしスプレッドシートを開いたときにアクティブにしたいという目的であれば起動時のトリガーにすればいいでしょう(実行まで少し間がありますが) 結局何が目的なのか分かれば時間でのトリガー以外に何かしらの方法があるかもしれません。
fuku-chann

2023/01/05 21:03 編集

PDFを作成しています。その時にメインのシートを非表示にしていますが、作成後表示させ、そのシートをアクティブにしたいです。 https://teratail.com/questions/286482
YAmaGNZ

2023/01/05 22:24

申し訳ありませんがその説明でも何がしたいのかが私には理解できません。 一つ言えるのは時間でのトリガーでは不可能です。 どのみち変更できたとしても、その時にスプレッドシートを閉じていたら意味がありません。 手動でそのシートをアクティブにしても閉じたら次に開いたときには最初のシートがアクティブになりますし 開いて編集しているときにトリガーが動作してアクティブシートが勝手に切り替わるというのも変です。 どうも私にはこれ以上協力できなさそうです。
fuku-chann

2023/01/06 02:28

ご連絡ありがとうございます。 スプレッドシートは開いていることを前提で問題ございません。 また、手動で編集することもありません。
guest

回答1

0

トリガーで実行する場合にはアクティブにするという概念がないと思ってください。
そのため、シートを取得し、そのシートに対して処理を実行します。

JavaScript

1function myFunction1() { 2 var spreadsheet = SpreadsheetApp.getActive(); 3 // どのシートに対する処理なのかを明記する 4 const sheetX = spreadsheet.getSheetbyName('XXXXX'); 5 // シートに対して処理を実行する 6 //spreadsheet.getRange('A1').setValue('成功'); 7 sheetX.getRange('A1').setValue('成功'); 8 //spreadsheet.setActiveSheet(spreadsheet.getSheetByName('シート1 のコピー'), true); 9 const sheetY = spreadsheet.getSheetByName('シート1 のコピー'); 10 //spreadsheet.getRange('A1').setValue('成功'); 11 sheetY.getRange('A1').setValue('成功'); 12};

投稿2023/01/11 00:37

macaron_xxx

総合スコア3191

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

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

fuku-chann

2023/01/11 03:45

ご回答ありがとうございます。 シート1は、PDFを作成するときに非表示にしています。PDFの作成が終わった後に再表示していますが、このときにシート1がトリガーでアクティブにならないので、何か方法がないかご質問させていただいております。
macaron_xxx

2023/01/11 03:49

トリガーにおいては、「アクティブ」という概念がないと思っていただいて問題ないです。 シート1をアクティブにしたいというのはどういうことなのでしょうか?再表示させたいということですか?
fuku-chann

2023/01/11 22:22

承知いたしました。トリガーだとアクティブという概念が無いのですね。 再表示まではできていますが、シート1以外のシートが選択された状態になっているので、シート1が選択された状態に変更することを検討しています。
macaron_xxx

2023/01/11 23:11

>シート1以外のシートが選択された状態になっているので、シート1が選択された状態に変更することを検討しています。 これは処理実行後に、スプレッドシートを開いた際の話でしょうか?
fuku-chann

2023/01/11 23:27

おっしゃる通りです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問