Google电子表格 - 应用程序脚本 - onOpen函数仅运行ca. 50%

时间:2018-01-03 16:57:03

标签: google-apps-script google-sheets

我为电子表格编写了这个脚本:

function onOpen() {    
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('My - Menue')
      .addItem('Menue auf Deutsch','DescGerman')
      .addItem('Menue in English','DescEnglish')
      .addToUi();

  var sheet = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("myFunction")
    .forSpreadsheet(sheet)
    .onChange()
    .create();
}

脚本正在运行并创建菜单 - 但不多了。我的menue的第二部分不会运行,所以我没有得到新的触发器。

有没有人知道或对我有什么问题?

2 个答案:

答案 0 :(得分:0)

问题是您在初始化应用程序之前尝试运行需要权限的脚本(SpreadsheetApp类和ScriptApp类将导致此问题)。 尝试不同的东西。

让菜单做的事

function onOpen() {    
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('My - Menue')
      .addItem('Menue auf Deutsch','DescGerman')
      .addItem('Menue in English','DescEnglish')
      .addToUi();
}

在侧栏中

然后当侧栏/对话无论打开电话然后调用下一个脚本。

document.addEventListener("DOMContentLoaded", function() {
  google.script.run.nextCode();
});

在Code.gs

  function nextCode(){
  var sheet = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("myFunction")
    .forSpreadsheet(sheet)
    .onChange()
    .create();
  }

答案 1 :(得分:0)

好的,我更新了表格中的代码。现在,每次进行更改时,第二张工作表都会附加一个时间戳,因为安装了一个触发器。通过单击菜单项DescGerman安装触发器。希望这是有帮助的。

function onOpen() {    
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('My - Menue')
      .addItem('Menue auf Deutsch','DescGerman')
      .addItem('Menue in English','DescEnglish')
      .addToUi();
      document.addEventListener("DOMContentLoaded", function() {google.script.run.nextCode();
});
}

function DescGerman(){
  var sheet = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("myFunction")
    .forSpreadsheet(sheet)
    .onChange()
    .create();
  }

function myFunction(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Tabellenblatt2')
  var time = new Date
  sheet.appendRow([time])
}