我想知道是否有办法从onEdit()事件中获取单元格的原始值。
例如:
但我也希望有可能获得原始价值,即“你好”。目前可能吗?
答案 0 :(得分:4)
如果您正在处理单个单元格,则可以使用onEdit(e)和e.oldValue。下面的示例在编辑任何单元格时将原始值添加到A1。 '未定义'如果细胞是空白的。
Booking.without(:child_bookings)
答案 1 :(得分:2)
唯一接近此代码的代码是使用onOpen出口进行保存 初始值。初始值可以通过多种方式保存。那里 是“用户属性”。我不知道它们是如何工作的。我是新手。
您还可以使用“隐藏”工作表在“onOpen”退出中保存值。 可能还有其他方法,我不知道。
随着细胞数量的增加,问题变得更加困难 你想保存原始值。
顺便说一下,你应该明白“onOpen”例程当时会触发 电子表格已打开。碰巧的是,最终用户也有访问权限 可以在onOpen处理程序完成执行之前更改单元格值。你可以 没有捕获所有初始值。
你应该知道的最后一件事。当UNDO或REDO时,不会触发onEdit触发器 事件发生。单元格的内容可能会发生变化而你也不会知道。
我不知道验证例程是如何工作的。如果例程拒绝一个值,那么 电子表格还原原始值?如果确实如此,那么这可能会解决 onOpen问题。如果它只告诉用户该值无效,则不会 很有帮助。
可能有效的方法,但非常复杂的是保存图像 在电子表格关闭之前。您将所有“之后”图像发布到第二个电子表格。 然后在onEdit处理程序中,查看另一个电子表格中的相应单元格。 然后,您决定还原上一个图像或允许新图像继续。
最后,使用数据表代替第二个电子表格的想法很疯狂。
我只是在学习所有这些概念,所以不要问我如何实现它们。 我只是明白他们可能是可能的。为了编码和支持目的 可能不是最好的选择。但是由于当前的脚本服务没有提供 在图像访问之前,它是我能做的最好的。你必须明白这一点 google interface是一个客户端 - 服务器应用程序。您的脚本在服务器上运行。数据更改发生在“客户端”(最终用户)浏览器中。
最后一点:onEdit触发器不会触发UNDO或REDO更改为单元格。 所以单元格可能会改变,而你的脚本也不知道它。
答案 2 :(得分:1)
我认为这不可能。
我想你可以通过在第二张纸上准确复制纸张来获得该功能,当你的'onEdit'功能结束时,它会自动更新。 在更新之前,第二张表上的数据将具有前一个值。 有点棘手,但为什么不呢? - )
编辑:似乎是'当天的问题',请参阅this post和Henrique Abreu的相关评论。
答案 3 :(得分:0)
当您以图解方式更改单元格的值时,可以使用setComment方法将原始值存储为该单元格中的注释。
答案 4 :(得分:0)
您基本上需要做的是创建一个影子表(您可以保护和隐藏它,甚至可以将其放在一个完全独立的电子表格中),并使用IMPORTRANGE函数将原始表格的值放入影子表中(这给了足够的延迟时间来获取编辑之前在单元格中的旧值。
=IMPORTRANGE("enter your original sheet's ID","enter the range you wish to get from the sheet")
请注意,使用此代码时,在同时编辑多个单元格时,该功能仅适用于第一个单元格。
function onEdit(){
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var originalSheet = sheet.getSheetByName('Original');
var shadowSheet = sheet.getSheetByName('Shadow');
var editedCell = originalSheet.getActiveCell();
var cellColumn = editedCell.getColumn();
var cellRow = editedCell.getRow();
var oldValue = shadowSheet.getRange(cellRow, cellColumn).getValue();
var cellValue = editedCell.getValue();
var editorMail = Session.getActiveUser().getEmail(); \\getting the editor email
if ("The condition you want to meet for the onEdit function to activate"){
editedCell.setNote(editorMail + "\n" + new Date + "\n" + oldValue + " -> " + cellValue);
}
}