这是我写的脚本。每当编辑该行时,它会在行的末尾添加时间戳。
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()触发器
调用该函数答案 0 :(得分: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());
}
答案 1 :(得分:1)
由于您是从onEdit触发器调用此函数,因此您可以(应该!)利用生成的Event来知道将时间戳放在何处。 (见Understanding Events。)
您声明在编辑该行时会设置时间戳“。我假设时间戳列是固定的,如下所示: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参数中传递的对象将有助于您想象其他可能性。
警告:您可以通过多种方式错过对电子表格的更改。有关详细信息,请参阅this answer。
如果您不熟悉Apps脚本触发器,请参阅How can I test a trigger function in GAS?了解调试提示。