如何在同一电子表格中为不同的工作表应用相同的脚本?

时间:2018-06-17 22:28:13

标签: google-apps-script google-sheets

我有一个google工作表文档,其中我需要为每个工作表单独运行相同的脚本,只要在B列上填充单元格,此脚本就会在A列上放置一个时间戳

function onEdit(event)
{ 
  var timezone = "GMT-6";
  var timestamp_format = "MM-dd-yyyy HH:mm:ss"; // Timestamp 
  var updateColName = "ColumnB"; //Columna que es actualiza
  var timeStampColName = "ColumnA"; //Columna actualizada automáticamente
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); //Sheet 

  var actRng = SpreadsheetApp.getActiveSpreadsheet().getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
    var cell = sheet.getRange(index, dateCol + 1);
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    cell.setValue(date);
  }
}

当我为columnA,columnB和Sheet2编写另一个脚本时,只将时间戳放在sheet1中,即使我在Sheet2上写了一些内容。

有什么建议吗?

其中一项建议是:

    function onEdit(event)
{ 
  var timezone = "GMT-6";
  var timestamp_format = "MM-dd-yyyy HH:mm:ss"; // Timestamp 
  var updateColName = "Timestamp"; //Columna que es actualiza
  var timeStampColName = "Ticket"; //Columna actualizada automáticamente
  var sheet = event.source.getActiveSheet();
  var actRng = event.source.getActiveRange();

  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
    var cell = sheet.getRange(index, dateCol + 1);
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    cell.setValue(date);
  }
}

但它没有将时间戳放在columnA上。

2 个答案:

答案 0 :(得分:1)

编辑B列时,您希望将时间戳放在已编辑的工作表的A列中,该工作表在单元格“A1”和“B1”中具有ColumnAColumnB。例如,在Sheet1中编辑列B时,它会将时间戳放入Sheet1的列A.当您在Sheet2中编辑列B时,它会将时间戳放入工作表2的列A.如果我的理解是正确的,那么这个修改怎么样?我认为你的情况有几个答案。所以请把它想象成其中之一。

来自:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); //Sheet 
var actRng = SpreadsheetApp.getActiveSpreadsheet().getActiveRange();

致:

var sheet = event.source.getActiveSheet();
var actRng = event.source.getActiveRange();

如果我的理解不是你想要的,请告诉我。我想修改我的答案。

答案 1 :(得分:0)

我通过创建一个新项目为新页面复制相同的代码来解决了这一问题。非常感谢您的协助。