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

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

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

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

Q&A

1回答

151閲覧

スプレッドシートAに紐づいたGASを実行し、スプレッドシートBに紐づいたGASを実行する(共有無しで実行するには)

mbcztpw

総合スコア31

Google Apps Script

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

0グッド

1クリップ

投稿2024/12/08 04:59

編集2024/12/08 05:00

実現したいこと

スプレッドシートAのメニューからスプレッドシートAに紐づいた関数Bを実行すると、スプレッドシートAを更新し(スプレッドシートCに紐づいた関数Dを実行して)スプレッドシートCを更新します。スプレッドシートCの関数DはライブラリでスプレッドシートAに取り込んでいます。共有設定を変更せず、実行者が自分以外でもエラー無く実行できるようにしたいです。

発生している問題・分からないこと

関数Bを実行する際に実行者がEさんになると、
ライブラリ(ID SheetC)がありません。ライブラリが削除されたか、読み取りアクセス権がない可能性があります。
とエラーが表示されます。
スプレッドシートAは自分がオーナー、スプレッドシートCは他人がオーナーで自分が編集者です。スプレッドシートCをEさんに共有できればエラーが出なくなると思いますが、共有はできません。Eさんが実行した場合にもエラーが出ないようにする方法を考えています。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

スプレッドシートFを作り、スプレッドシートCの関数DをライブラリでスプレッドシートFに取り込み、スプレッドシートAを更新する際にスプレッドシートFに更新したという情報を渡すようにして、スプレッドシートFのトリガーで定期的に更新情報を受け取ったか確認し、更新情報を受け取れば関数Dを実行する方法を考えています。ただ、この方法の場合、新たにスプレッドシートFが必要になります。より簡素な方法はないでしょうか。よろしくお願いします。

補足

特になし

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

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

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

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

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

guest

回答1

0

一つの案としては、トリガーで起動するスクリプトは、
トリガー設置者の権限で実行されることを利用する方法です

Eさんは、スプレッドシートAのメニューから関数Bを実行するのではなく
トリガーを発動して関数Bを実行する方法ですが…

例えば、
特定のセルのチェックボックスのONで関数Bを実行するようにしておき
質問者様がスプレッドシートAに設定した編集時のトリガーでその関数が起動するようにしておけば、
Eさんが特定のセルのチェックボックスをチェックすると
質問者様の権限で関数Bが実行されます…

念の為、下記のスクリプトで動作確認してみました
Aのみの編集権限を有するアカウントで
エディタから実行すると権限エラーになりますが、
チェックボックスのONなら権限エラーにならずCの関数Dが実行されました

JavaScript

1// スプレッドシートA:編集時トリガーで起動する関数 2function onCellCheck(e) { 3 if (e) { 4 if (e.range.getA1Notation() === 'C3' && 5 e.range.isChecked()) { 6 // C3セルがチェックされたら関数Bを実行 7 functionB('Aのトリガーで起動'); 8 } 9 } 10} 11 12// スプレッドシートA:ライブラリを利用している関数B 13function functionB(text) { 14 // ライブラリYellowGreenの中のfunctionDを実行 15 YellowGreen.functionD(text ?? 'Aのメニューから起動'); 16} 17 18// スプレッドシートCの関数D 19function functionD(text) { 20 const ss = SpreadsheetApp.openById('スプレッドシートCのID'); 21 const sheet = ss.getActiveSheet(); 22 sheet.getRange('A1').setValue(text ?? 'Cのメニューから実行'); 23}

投稿2024/12/08 06:38

編集2024/12/08 07:40
YellowGreen

総合スコア841

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問