【问题标题】:How to run onEdit on multiple sheets如何在多张纸上运行 onEdit
【发布时间】:2013-12-19 02:09:36
【问题描述】:

我的代码是一个调度程序,它使用户注册到特定工作表中的特定位置。问题是该代码仅适用于第一张纸(“Jan 20 Mon”)。

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName("Jan 20 Mon");
  var sheet2 = ss.getSheetByName("Jan 21 Tue");
  var sheet3 = ss.getSheetByName("Jan 22 Wed");
  var sheet4 = ss.getSheetByName("Jan 23 Thurs");
  var sheet5 = ss.getSheetByName("Jan 24 Fri");

  var condition1as1 = sheet1.getRange("B2").getValue(); var condition1bs1 = sheet1.getRange("C2").getValue(); var condition1cs1 = sheet1.getRange("D2").getValue(); var condition1ds1 = sheet1.getRange("E2").getValue();
  var condition1as2 = sheet2.getRange("B2").getValue(); var condition1bs2 = sheet2.getRange("C2").getValue(); var condition1cs2 = sheet2.getRange("D2").getValue(); var condition1ds2 = sheet1.getRange("E2").getValue();
  var condition1as3 = sheet3.getRange("B2").getValue(); var condition1bs3 = sheet3.getRange("C2").getValue(); var condition1cs3 = sheet3.getRange("D2").getValue(); var condition1ds3 = sheet1.getRange("E2").getValue();
  var condition1as4 = sheet4.getRange("B2").getValue(); var condition1bs4 = sheet4.getRange("C2").getValue(); var condition1cs4 = sheet4.getRange("D2").getValue(); var condition1ds4 = sheet1.getRange("E2").getValue();
  var condition1as5 = sheet5.getRange("B2").getValue(); var condition1bs5 = sheet5.getRange("C2").getValue(); var condition1cs5 = sheet5.getRange("D2").getValue(); var condition1ds5 = sheet1.getRange("E2").getValue();

  if (condition1cs1 == "1" && condition1ds1 == "None") {
    var response = Browser.msgBox("PLEASE RECHECK SCHEDULE AND TID.", condition1as1+" , "+condition1bs1+" Are you sure?", Browser.Buttons.YES_NO);
    if (response == "yes") {
      sheet1.hideRows(2,1);
      sheet1.getRange('E2').setValue("1");
      //insert msgBox here
    } else {
      Browser.msgBox("Input again.");
    }
  }

  if (condition1cs2 == "1" && condition1ds2 == "None") {
    var response = Browser.msgBox("PLEASE RECHECK SCHEDULE AND TID.", condition1as2+" , "+condition1bs2+" Are you sure?", Browser.Buttons.YES_NO);
    if (response == "yes") {
      sheet2.hideRows(2,1);
      sheet2.getRange('E2').setValue("1");
      //insert msgBox here
    } else {
      Browser.msgBox("Input again.");
    }
  }
}

基本上,我尝试设置我正在使用的所有工作表,以便我可以随时访问它们。第一个 if 用于第一张纸(并且有效)。第二个 if 用于第二张纸(它不起作用)。

【问题讨论】:

  • 如何让它在多张纸上运行?在多张纸上运行 onEdit 背后的格式/原则是什么?
  • “代码仅在第一张纸上有效”是什么意思?你能详细说明一下吗
  • 第一个“if”用于第一张纸。第二个“如果”是针对第二张纸的。该代码仅在第一张纸/第一个“如果”之前有效。第二个“如果”根本不起作用。也就是说,我将为剩下的 3 张纸再添加 3 个“如果”(当然,使用我的代码也不起作用)。

标签: javascript google-apps-script google-sheets triggers


【解决方案1】:

Understanding Events 中阅读电子表格编辑事件。使用传递给 onEdit 函数的事件,您可以确定编辑发生的位置,并避免使用任何显式方法来检索该信息。

警告:此功能目前已在 2013 年 12 月推出的新表格中被破坏。有足够的Scripting Issues,您现在应该避免使用新表格。

这是您如何做到这一点的示例。

function onEdit(event) {
  var ss = event.source;  // you don't use this, but if you did, here's how to get it

  var cell = event.range;  // This is the cell that was edited
  // TODO: Add code that returns immediately if the edit occurred somewhere we don't care about

  var sheet = cell.getSheet();

  var request = sheet.getRange("B2:E2").getValues();
  var conditionas = request[0];
  var conditionbs = request[1];
  var conditioncs = request[2];
  var conditionds = request[3];

  if (conditioncs == "1" && conditionds == "None") {
    var response = Browser.msgBox("PLEASE RECHECK SCHEDULE AND TID.", conditionas+" , "+conditionbs+" Are you sure?", Browser.Buttons.YES_NO);
    if (response == "yes") {
      sheet.hideRows(2,1);
      sheet.getRange('E2').setValue("1");
      //insert msgBox here
    } else {
      Browser.msgBox("Input again.");
    }
  }
}

【讨论】:

  • TypeError:无法从未定义中读取属性“源”。 (第 2 行,文件“原型代码”)
  • onEdit(event) - 如果不声明参数,则为undefined
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 2014-01-03
相关资源
最近更新 更多