onEdit()触发器无法创建一个新的Spreadsheet。

问题描述 投票:0回答:1

我正试图创建一个自定义函数,复制一个Sheet的值,然后用这些值创建另一个电子表格。所有的代码都能正常工作,但我需要从手机上访问它。这就是为什么我使用onEdit(e)触发器。使用这个触发器,脚本在应该创建新的工作表的时候就停止了。我用状态框检查了一下,每次都在 "创建工作表 "时崩溃。有没有其他方法,让我可以在手机上访问我的脚本,或者解决这个奇怪的问题。

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var r = s.getActiveRange();

  if(s.getName() == "FlugbuchExport" && r.getColumn() == 4 && r.getRow() == 4 && r.getValue() == true){


    var infoCell = s.getRange(6,3,1,3);
    infoCell.setValue("");
    infoCell.setValue("Process started");



    var dataSheet = ss.getSheetByName("Flugbuch-GmbH"); 
    var windenkladde = ss.getSheetByName("Windenkladde");
    var dateRange = windenkladde.getRange(20,4);
    var date = dateRange.getValue();
    var dateString = Utilities.formatDate(date, "UTC", "dd.MM.yyyy");
    var downloadLinks = ss.getSheetByName("Downloadlinks");


    infoCell.setValue("Neue Tabelle wird erstellt");
    var ssNewName = "LFO " + "Flugbuch - GmbH - " + dateString;
    infoCell.setValue("Creating sheet");
    var ssNew = SpreadsheetApp.create(ssNewName, dataSheet.getLastRow(), dataSheet.getLastColumn());
    var ssNewId = ssNew.getId();



    infoCell.setValue("Data got copied");
    dataSheet.copyTo(SpreadsheetApp.openById(ssNewId));



    var ssNewSheetDelete = ssNew.getSheets()[0];
    ssNew.deleteSheet(ssNewSheetDelete);
    downloadLinks.appendRow([date,ssNew.getUrl()]);
    infoCell.setValue("Process finished");
    r.setValue(false);
  }

}
google-apps-script
1个回答
0
投票

你正在使用一个 简单的 onEdit 触发

  • 简单的触发器有 限制,如。

    他们不能访问需要授权的服务

  • 如果你从脚本编辑器上的 View - > Executions,你会看到执行失败的消息,如

Exception: You do not have permission to call SpreadsheetApp.create. Required permissions: https://www.googleapis.com/auth/spreadsheets

解决办法

  • 替换为简单的 onEdit 触发 可安装 一个
  • 为此,请将你的函数重命名为不同于 onEdit
  • 去吧 Edit > Current project's triggers
  • 点击 Add Trigger
  • 选择你的功能,在 Choose which function to run
  • 指定 Select event type On edit
© www.soinside.com 2019 - 2024. All rights reserved.