Google Script:获取所有选定行的特定列的时间戳(循环?)

时间:2017-01-31 11:28:50

标签: google-apps-script google-sheets

在Google电子表格中,如果修改了该行中的任何值,我想在特定列中创建时间戳。我可以使用以下代码(Google Script)来管理它:

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  var r = s.getActiveCell();
  var row = r.getRow()
  s.getRange('Z' + row).setValue(new Date()).setNumberFormat('dd.MM.yy, hh:mm'); //inserts a timestamp in column Z of the modified row
}

如果修改了多于一行的行,我想扩展功能,例如。如果通过复制/粘贴插入更多单元格。现在只有第一行得到它的时间戳。

您对我如何处理所有选定的行有什么想法吗?也许是通过循环?

更新:更进一步: 有没有办法只在单元格为空时写入时间戳!?不应覆盖现有的时间戳。

Br,Fred

2 个答案:

答案 0 :(得分:1)

您可以使用onEdit事件对象推断所有需要的属性

function onEdit(e) {
  e.range
   .getSheet()
   .getRange(e.range.getRow(), 26, e.range.getNumRows())
   .setValue(new Date())
   .setNumberFormat('dd.MM.yy, hh:mm');
}

或者像这样你喜欢很多变量

function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  var row = range.getRow();
  var rows = range.getNumRows();
  var date = new Date();

  sheet
   .getRange(row, 26, rows)
   .setValue(date)
   .setNumberFormat('dd.MM.yy, hh:mm');
}

编辑:仅编写新日期

function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  var row = range.getRow();
  var rows = range.getNumRows();
  var date = new Date();

  var dates = sheet
      .getRange(row, 26, rows)
      .getValues()
      .map(function(row) {return [row[0] || date];});

  sheet
   .getRange(row, 26, rows)
   .setValues(dates)
   .setNumberFormat('dd.MM.yy, hh:mm');
}

答案 1 :(得分:0)

在Robin的代码中添加if(sheet.getRange(row, 26, rows).getValues() == '')应该在添加时间戳之前检查第26列中的相关单元格是否为空。

function onEdit(e) {
  var range = e.range;
  var sheet = range.getSheet();
  var row = range.getRow();
  var rows = range.getNumRows();
  var date = new Date();

  if(sheet.getRange(row, 26, rows).getValues() == ''){     //added line: 1

  sheet
   .getRange(row, 26, rows)
   .setValue(date)
   .setNumberFormat('dd.MM.yy, hh:mm');
  }                                                        //added line: 2
}