0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

onSelectionChangeでSpreadsheetApp.getUi().showSidebarしたかった

Posted at

セルをクリックしたらHTMLフォーム出したかった

GoogleSpreadSheetで、下記のようにメニューに登録したスクリプトからはサイドバーが表示できる。

function onOpen() {
SpreadsheetApp.getUi()
.createMenu("予約管理")
.addItem("初回に必ず実施する設定", "openSidebarAndAuth")
.addToUi();
}

でも、onSelectionChangeでopenSidebarAndAuthを呼び出してもうんともすんとも。
ChatGPTさんオススメの方法なのに。
エラーを確認すると、

指定された権限では Ui.showSidebar を呼び出すことができません。必要な権限: https://www.googleapis.com/auth/script.container.ui

ChatGPTさんにたずねても一向に解消しない。ハルシネーション?なの?堂々めぐりになった。
・マニフェストappscript.jsonをいじれ
・onSelectionChangeがそもそも発火していないのでは
・サイドバーhtmlに定義した変数がundefinedなのでは
・サイドバーhtmlに定義した日付として扱う変数の型とかあれとかチミなんかしてない?
全部はずれ。

ググって、下記英語サイトを見つけたのでChatGPTさんを問い詰めた。

✅ 公式コメントの要点(Googleエンジニアによる)
onSelectionChange トリガーは、スプレッドシートのコンテナUI から呼び出されたときのみ、UI 操作を許可します。
ただし、このトリガーは "マクロ" としてではなく、Google Sheets の内部実装によって呼ばれるため、SpreadsheetApp.getUi() による UI 呼び出しは失敗することがあります。

🔴 特に問題なのはこの一文:
“onSelectionChange() cannot reliably show UI elements such as sidebars or dialogs due to the execution context.”
(onSelectionChange() は実行コンテキストの制限により、サイドバーやダイアログを確実に表示できるとは限りません)

だって。

結局

セルの上に画像おいて、GASのスクリプトを紐づけて起動することにした。
ワンクリック手間が増えるので残念だし、見た目も。。。
なんかいい方法無いのかな。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?