onOpenメニューのあるスプレッドシートを複数のユーザーに配布します。メニューの定義と機能をライブラリ内に保持したいので、いくつかのメニューオプションを追加したり、いくつかの機能を更新したりすると、そのスプレッドシートを使用するすべての人が自動的に更新されます。
これまでのところ、スプレッドシートスクリプトには、次の単純なコードしかありません。
function onOpen() {
myLib.loadMenu();
}
メニューは問題なくスプレッドシートに読み込まれますが、メニューの呼び出しと実際の関数(myLibの有無にかかわらず)にどのように名前を付けても、オプションを使用すると常に「スクリプト関数doSomethingが見つかりませんでした」というエラーが発生します。そのメニューから。
このアプローチを機能させるには、メニューの関数呼び出しとライブラリの実際の関数にどのように名前を付ける必要があるかについてのアイデア。
ありがとう、ファウスト
編集-1:詳細とサンプルコードを教えてください
私の目標は、すべてのユーザーのスプレッドシートを更新しなくても、ライブラリからそのスプレッドシートメニューにオプションを追加できるようにすることです。
これはすべてスプレッドシートスクリプトに含まれているサンプルコードであり、ライブラリはまだ使用されておらず、問題なく機能します
function onOpen() {
testMenu();
}
function testMenu() {
SpreadsheetApp.getActiveSpreadsheet().addMenu(
'Testing', [
{ name: 'Do Something #1', functionName: 'someFunction1' },
null,
{ name: 'Do Something #2', functionName: 'someFunction2' } ]);
}
function someFunction1() {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue("Hello from someFunction1");
}
function someFunction2() {
SpreadsheetApp.getActiveSheet().getRange("A2").setValue("Bye from someFunction2");
}
私がやりたいのは同じ機能を取得することですが、次のように、スプレッドシートスクリプトとライブラリの間でコードを分割します
スプレッドシートスクリプト
function onOpen() {
xsLib.testMenu();
}
図書館で
function testMenu() {
SpreadsheetApp.getActiveSpreadsheet().addMenu(
'Testing', [
{ name: 'Do Something #1', functionName: 'someFunction1' },
null,
{ name: 'Do Something #2', functionName: 'someFunction2' } ]);
}
function someFunction1() {
SpreadsheetApp.getActiveSheet().getRange("A1").setValue("Hello from someFunction1");
}
function someFunction2() {
SpreadsheetApp.getActiveSheet().getRange("A2").setValue("Bye from someFunction2");
}
この分割アプローチでは、ライブラリ呼び出しから作成されたメニューがスプレッドシートに正しく表示されますが、そのテストメニューのオプションを使用すると、「スクリプト関数someFunction1が見つかりませんでした」などのメッセージエラーが表示されます。