如何在Google电子表格更改之前获取单元格的价值?

时间:2012-11-14 08:02:31

标签: google-sheets google-spreadsheet-api

在退出单元格之前,似乎不会触发此函数,因为我得到的值是更改后的值。我需要预更改值,但实际上我只需要编辑特定列。

谢谢

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  var r = s.getActiveCell();
  var columnNum = r.getColumn(); 
  var msg;

  if (columnNum == 11) {

    var dateCell = s.getRange(r.getRow(), 11); 
    var v=dateCell.getValue();
    msg = 'Value= ' + v;
    Browser.msgBox (msg);

    //dateCell.setValue(v);

  }
}

3 个答案:

答案 0 :(得分:1)

这是一个非常古老的问题,但是如果其他人需要答案,则使用事件对象很容易地获得任何已编辑单元格的旧值和新值:

function onEdit(e) {
  let oldValue = e.oldValue;
  let newValue = e.value;
  console.log('The range's old value was: ' + oldValue + ', and the updated value is: ' + newValue);
}

以下是Google Sheets event objects的可访问属性。

答案 1 :(得分:0)

据我所知,在编辑前仍然无法捕获单元格的值。

您可能希望加注明星this issue on the issue tracker;它目前被视为中等优先级的增强请求。

答案 2 :(得分:0)

@AdamL无论如何以编程方式访问电子表格修订历史记录?

对不起,这超出了我的noob能力,但我的问题可能为A B问题的解决方法提供了线索。

@A B另一个可能的解决方法 您可以设置基于时间的触发器来填充2个数组。来自您检查编辑的列中的当前数据的1个数组,以及来自相同数据的先前快照的1个数组。然后通过使用循环来测试自上次触发事件以来是否有任何值已更改,您可以确定哪些值/值已更改(如果有)如果您的测试值已更改,则推送rowNumber()和colNumber()并将相同数据的先前和当前实例的getValue()添加到新数组中,还包括时间戳新的Date()。让这个新的数组数据填充新的工作表或电子表格。

如果与onEdit函数一起使用,您将能够看到前后值变化及其发生的大致时间。

基于时间的触发器可以设置为每分钟,每小时等运行