0

这是我写的脚本。每当编辑该行时,它都会在该行的末尾放置一个时间戳。

function setDate() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
  //Get Active cell
      var mycell = ss.getActiveSelection();
      var cellcol = mycell.getColumn();
      var cellrow = mycell.getRow();
  //Check to see if column is A or B to trigger
      if (cellcol == EDITMECOLUMN)
      {
  //check for row to trigger
        if (cellrow == EDITMEROW)
        {
  //Find cell and set date in a defined cell
      var celldate = sheet.getRange(EDITMEROW, EDITMECOLUMN);
      celldate.setValue(new Date());
  //end set date
        }
      }
 }

它工作得很好,但我怎样才能改变它,以便它为每一行迭代,而不是我必须手动复制每一行的脚本?我有一个填充电子表格的表格,表格中每个主题的“最新”结果都放在报告电子表格中。我需要每一行的列时间戳,因为每一行代表表单中的一个主题,并且表单用户可以选择一次跳过几个星期的部分。

EDITMExx 片段只是我放置列或行# 的位置。

从 onEdit() 触发器调用该函数

4

2 回答 2

2

创建一个循环遍历所有行的 for 循环(或任何类型的循环)。就像是:

var numRows = sheet.getDataRange().getNumRows();
var data = sheet.getDataRange().getValues();
for(var i=0; i<numRows; i++){
    data[i][someColumnWhereYouWantDateSet].setValue(new Date());
}
于 2013-05-15T14:04:51.147 回答
1

由于您是从 onEdit 触发器调用此函数,因此您可以(应该!)利用生成的事件来知道将时间戳放在哪里。(请参阅了解事件。)

您声明您在“每当编辑该行时”放置一个时间戳。我假设时间戳列是固定的,如下所示:var TIMESTAMP = xx,其中 xx 是列号。

/**
 * onEdit function to place timestamp in a specified column
 * when an edit is made in a row.
 * 
 * @param {Event Object} event  Information about the event
 *                              that caused this function to
 *                              be triggered.
 */
function setDate(event) {
  var TIMESTAMP = 5;   // Column number for timestamp
  var HEADER_ROWS = 1; // # of header rows to skip monitoring

  var ss = event.source.getActiveSheet();
  var changedRange = event.source.getActiveRange();
  var changedRow = changedRange.getRow();

  //Logger.log("Edited range:" + changedRange.getA1Notation());
  if (changedRow > HEADER_ROWS) {
    ss.getRange(changedRow,TIMESTAMP).setValue(new Date());
  }
  // else do nothing
}

这是一个非常基本的 onEdit 函数,只有一个条件检查——它避免了给你的标题加时间戳。您可以添加其他测试来监控列子集、特定工作表等。了解在 Event 参数中传递了哪些对象将帮助您想象其他可能性。

警告:有很多方法可以让您错过对电子表格的更改。有关更多信息,请参阅此答案

如果您是 Apps 脚本触发器的新手,请参阅如何在 GAS 中测试触发器函数?用于调试提示。

于 2013-05-15T18:07:22.263 回答