6

次の単純な関数を作成しました。

function test(r,c) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(r,c).setBackground("red");
  return 1;
}

スプレッドシートに「=test(row(),column())」と書きます

これにより、エラーが発生し、次のメッセージが表示されます: エラー: setBackground を呼び出す権限がありません (3 行目)。

次のようにスクリプトで別の関数呼び出しを作成しても問題ありません。

function test_the_test(){
  test(5,4); 
}

スプレッドシートのセルからテスト関数を呼び出せないのはなぜですか?

前もって感謝します

4

3 に答える 3

7

ドキュメントで明確に説明されているように、カスタム関数は値を返しますが、それらが含まれているセルの外部に値を設定することはできません。ほとんどの場合、セル A1 のカスタム関数はセル A5 を変更できません。 もちろん、setBackground などの他のメソッドにも当てはまります。

于 2014-06-26T09:57:34.507 に答える
3

セルからコンテンツを設定するものを呼び出すことはできませんが、ボタンから呼び出すことは可能です。

実際には非常に簡単です。他のセルの内容を変更できないというのは、間違いなく真実ではありません。

秘訣は、関数をセルから呼び出すのではなく、図面/画像にマウントすることです。

  1. 挿入 -> 描画をクリックします
  2. 画像を描画して保存します (スプレッドシートに画像が表示されます)。
  3. マウスの右ボタンでクリックします - 右上隅に小さな三角形のオープニングオプションがあります
  4. [スクリプトの割り当て] をクリックし、スクリプトの名前を括弧なしで入力して ("test()" ではなく "test" など)、確認します。
  5. ボタンをクリックします。スプレッドシートへのアクセス権限を求めるポップアップ ウィンドウが表示されます。
  6. 確認してください。更新で問題が発生した場合は、手動で更新してください (F5)
  7. ボタンをクリックすると、好きなセルを編集できます

このコードは、ボタンにマウントすると正常に機能します。

function test() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(3,5).setBackground("red");
}
于 2015-09-08T21:59:58.037 に答える