为什么 onEdit 复选框点击无法触发 Google Apps 脚本中的导入?

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

我正在制作一个相互链接的原材料库存电子表格和酿造日志,我希望能够通过单击将当前库存拉入酿造日志表。

我已经将 importRawMat 函数连接到按钮“Boop”,该函数可以很好地导入我需要的数据,但我没有成功地将其链接到 onEdit 的复选框单击,尽管 onEdit 触发了“清除” ' 功能很好。

我想知道这是否与简单触发器受限于需要授权的服务有关?如果是这样,我如何才能触发此功能,该功能可通过 Google Sheets 应用程序访问,因为按钮和自定义菜单无法通过那里工作。

请参阅下面的链接和代码:

https://docs.google.com/spreadsheets/d/1qrDVIEpv7DeqGlIq8YUBTyn2DWfNbsoSm77I30rd9Jw/edit?gid=411516577#gid=411516577


    function onEdit(e) {
      if (!e.value) return
      if (e.value !== "TRUE") return
      if (e.range.rowStart !== 1) return
      if (e.range.columnStart !== 1) return
      if (e.range.getSheet().getName() !==  "Brew") return

      importRawMat()

    }

    function onEdit(e) {
      if (!e.value) return
      if (e.value !== "TRUE") return
      if (e.range.rowStart !== 2) return
      if (e.range.columnStart !== 3) return
      if (e.range.getSheet().getName() !==  "Brew") return

     Clear()
      e.range.uncheck()

    }

    function Clear() {
      var spreadsheet = SpreadsheetApp.getActive();
      spreadsheet.getRangeList(['A1', 'A1']).activate()
      .uncheck();
    };

    function importRawMat() {

      var originsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1GOmX04m8OC1dFWFdhBonLTt07SImkq6gGx5l9l6SSXA/edit?gid=411516577#gid=411516577').getSheetByName('Malt');
      var origindata = originsheet.getDataRange().getValues();
      var destinationsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Blank');
      destinationsheet.clearContents();destinationsheet.getRange(1,1,origindata.length,origindata[0].length).setValues(origindata);
  
    }

google-sheets google-apps-script import
1个回答
0
投票

修改要点:

  • 在当前阶段,简单触发器
    onEdit
    不能用于
    SpreadsheetApp.openByUrl
    。我不确定您是否使用问题中的可安装 OnEdit 触发器。所以,我猜测这可能是几个修改点之一。
  • 在您的显示脚本中,有 2 个功能
    onEdit
    。在这种情况下,脚本无法正确运行。

当这些要点反映在你的放映脚本中时,就会变成如下所示。

修改后的脚本:

请执行以下流程。

  1. 请从您的项目中删除 2 个
    onEdit
    函数。
  2. 请将以下脚本复制并粘贴到项目中。
  3. 请将 OnEdit 触发器安装到
    installedOnEdit
    参考

通过此流程,当您选中 Brew 表的“A1”或“C2”复选框时,功能

installedOnEdit
将由可安装的 OnEdit 触发器自动运行。

function installedOnEdit(e) {
  const { range } = e;
  const sheet = range.getSheet();
  if (range.isBlank() || !range.isChecked()) return;
  if (range.rowStart == 1 && range.columnStart == 1 && sheet.getName() == "Brew") {
    importRawMat();
  } else if (range.rowStart == 2 && range.columnStart == 3 && sheet.getName() == "Brew") {
    Clear();
    range.uncheck();
  }
}

注:

  • 在此修改中,每个 if 语句中的脚本来自显示脚本的每个
    onEdit
    函数。另外,此脚本假设您的函数
    Clear()
    importRawMat()
    工作正常。请注意这一点。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.