如何在Google表格中的多个标签上使用相同的脚本

时间:2019-11-12 15:52:42

标签: google-apps-script google-sheets

我在Google表格中使用了自动时间戳记脚本。在特定单元格中输入内容时,脚本将在特定单元格中自动添加时间戳。 但是问题是我想对Google表格的多个标签中的多个实例使用相同的脚本。但这仅适用于一审。

我想添加新闻标签(我已经知道那是有限的页面数)。其他名称是:“ Natal”,“ Joao Pessoa”,“ Novo1”,“ novo2”

function onEdit(e)
{
  var sheet = e.source.getActiveSheet();
  if (sheet.getName() == "CAICO") //"order data" is the name of the sheet where you want to run this script.
  {
    var actRng = sheet.getActiveRange();
    var editColumn = actRng.getColumn();
    var rowIndex = actRng.getRowIndex();
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
    var dateCol = headers[0].indexOf("Alt") + 1;
    var orderCol = headers[0].indexOf("Data") + 1;
    if (dateCol > 0 && rowIndex > 1 && editColumn == orderCol)
    {
      sheet.getRange(rowIndex, dateCol).setValue(Utilities.formatDate(new Date(), "UTC+8", "dd-MM-yyyy"));
    }
  }
}

2 个答案:

答案 0 :(得分:2)

您应该创建一个包含工作表名称的数组,然后检查触发器是否来自这些工作表之一。您可以使用.indexOf()进行检查,如果找不到该值,它将返回-1(请注意,这是区分大小写的。)

var sheets = ["CAICO", "Natal", "Joao Pessoa", "Novo1", "novo2"];
if (sheets.indexOf(sheet) != -1) {
  // do something
}

我也会高度鼓励您改变获取触发单的方式。现在,您正在使用e.source.getActiveSheet(),它不一定是编辑所在的工作表。例如,如果您在“ Sheet1”中进行编辑,然后快速打开“ Sheet2”,则如果脚本执行缓慢,则.getActiveSheet()调用实际上可以返回“ Sheet2”。

这种情况不太可能发生,但是您可以通过编写e.range.getSheet()来轻松避免这种情况。从documentation中,我们知道e.range代表“已编辑的单元格或单元格范围”。因此,这保证了我们正在考虑的工作表是经过编辑的工作表。

类似地,我在这里可能会误读您的代码,但是我认为您应该对actRng声明进行类似的更改。

function onEdit(e)
{
  var sheets = ["CAICO", "Natal", "Joao Pessoa", "Novo1", "novo2"]; // Sheet names that will trigger execution. Case-sensitive.
  var sheet = e.range.getSheet();
  if (sheets.indexOf(sheet.getName()) != -1) // Check if the edit was made in an applicable sheet
  {
    var actRng = e.range; // The edited range
    var editColumn = actRng.getColumn();
    var rowIndex = actRng.getRowIndex();
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
    var dateCol = headers[0].indexOf("Alt") + 1;
    var orderCol = headers[0].indexOf("Data") + 1;
    if (dateCol > 0 && rowIndex > 1 && editColumn == orderCol)
    {
      sheet.getRange(rowIndex, dateCol).setValue(Utilities.formatDate(new Date(), "UTC+8", "dd-MM-yyyy"));
    }
  }
}

答案 1 :(得分:0)

为什么不只是在函数中添加或?

function onEdit(e)
{
  var sheet = e.source.getActiveSheet();
  var n = sheet.getName();
  if (n == "CAICO" || n == "Natal" || n== "Joao Pessoa" || n == "Novo1" || n== "novo2") //"order data" is the name of the sheet where you want to run this script.
  {
    var actRng = sheet.getActiveRange();
    var editColumn = actRng.getColumn();
    var rowIndex = actRng.getRowIndex();
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
    var dateCol = headers[0].indexOf("Alt") + 1;
    var orderCol = headers[0].indexOf("Data") + 1;
    if (dateCol > 0 && rowIndex > 1 && editColumn == orderCol)
    {
      sheet.getRange(rowIndex, dateCol).setValue(Utilities.formatDate(new Date(), "UTC+8", "dd-MM-yyyy"));
    }
  }
}