0

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

谢谢

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);

  }
}
4

3 回答 3

2

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

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 表格事件对象的可访问属性。

于 2020-11-09T14:18:54.663 回答
0

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

抱歉,这超出了我的菜鸟能力,但我的问题可能为 A B 问题的解决方法提供了线索。

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

如果与您的 onEdit 函数结合使用,您将能够看到值更改之前和之后,以及它们发生的大致时间。

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

于 2012-11-15T11:12:30.477 回答
0

据我所知,在编辑之前捕获单元格的值仍然是不可能的。

您可能想在问题跟踪器上为这个问题加注星标;它目前被视为中等优先级的增强请求。

于 2012-11-14T23:16:21.667 回答