编辑范围时的Google脚本返回日期

时间:2014-12-07 18:25:20

标签: date google-apps-script google-sheets

我目前正在制作电子表格的脚本。

所需行为:编辑单元格F-I时,应在相应行的单元格L中返回最近编辑的日期。

我找到了两个代码示例,当编辑行中的任何字段时,第一个返回单元格L中的日期。这种行为是可以接受的,但并不理想,因为它适用于任何col

function onEdit() {
 var s = SpreadsheetApp.getActiveSheet();
 var r = s.getActiveCell();
 if( r.getColumn() != 2 ) {
   var row = r.getRow();
   var time = new Date();
   time = Utilities.formatDate(time, "GMT-05:00", "yyyy-MM-dd");
   SpreadsheetApp.getActiveSheet().getRange('L'+row.toString()).setValue(time);
  };
 };

第二个应该将一个单元格的日期返回到已编辑列的右侧。这种行为是不可取的,因为它可能会覆盖其他重要数据。

function onEdit(e) {
var s = SpreadsheetApp.getActiveSheet();
var cols = [1, 7, 13, 19, 25, 31]
if (s.getName() !== "Sheet1" || cols.indexOf(e.range.columnStart) == -1) return;
s.getRange(e.range.rowStart, e.range.columnStart + 1)
    .setValue(new Date());
};

任何有关编辑这些内容以获得更接近所需结果的帮助或建议都将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

function onEdit(e) {
var ss = e.source.getActiveSheet();
var watchedCols = [6, 7, 8, 9]
if (watchedCols.indexOf(e.range.columnStart) === -1) return;
ss.getRange(e.range.rowStart, 12)
    .setValue(e.value ? Utilities.formatDate(new Date(), "GMT-05:00", "yyyy-MM-dd") : null)
}

请注意,该脚本适用于Google电子表格的每张工作表。如果您想将其限制为仅一张(并且还排除第一行中的编辑(标题?)),您可以尝试这样的事情:

function onEdit(e) {
var ss = e.source.getActiveSheet();
var watchedCols = [6, 7, 8, 9];
var watchedSheet = 'Sheet1'; //change name if needed
if (watchedCols.indexOf(e.range.columnStart) === -1 || ss.getName() !== watchedSheet || e.range.rowStart < 2) return;
ss.getRange(e.range.rowStart, 12)
    .setValue(e.value ? Utilities.formatDate(new Date(), "GMT-05:00", "yyyy-MM-dd") : null)
}

希望有帮助吗?