Я написал этот скрипт для электронной таблицы:

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();
}

Скрипт запущен и меню создается - но не более того. Вторая часть из моего меню не запускается, поэтому я не получаю новый триггер.

Кто-нибудь знает или подскажет, в чем моя проблема?

0
J. Doe 3 Янв 2018 в 19:57

2 ответа

Лучший ответ

Хорошо, я обновил код в таблице. Теперь второй лист будет добавлять метку времени каждый раз, когда вносятся изменения, потому что установлен триггер. Триггер устанавливался нажатием на пункт меню 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])
}
0
Jason Allshorn 5 Янв 2018 в 17:26

Проблема в том, что вы пытаетесь запустить сценарий, которому требуется разрешение до инициализации приложения (это вызовет класс 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();
  }
0
Jason Allshorn 3 Янв 2018 в 19:04