目前undo()
,Spreadsheet/Sheet/Range 类中没有 Google Apps 脚本的功能。在 Issue Tracker 上打开了几个问题,我现在只能找到一个(我不知道 Triaged 是什么意思):这里。
有人建议使用 DriveApp 和修订历史的解决方法,但我环顾四周并没有发现任何东西(也许它被埋没了?)。无论如何,undo()
对于这么多不同的操作来说,一个函数是非常必要的。我只能想到一种解决方法,但我无法让它工作(数据存储的方式,我什至不知道它是否可能)。这是一些伪 -
function onOpen () {
// Get all values in the sheet(s)
// Stringify this/each (matrix) using JSON.stringify
// Store this/each stringified value as a Script or User property (character limits, ignore for now)
}
function onEdit () {
// Get value of edited cell
// Compare to some value (restriction, desired value, etc.)
// If value is not what you want/expected, then:
// -----> get the stringified value and parse it back into an object (matrix)
// -----> get the old data of the current cell location (column, row)
// -----> replace current cell value with the old data
// -----> notifications, coloring cell, etc, whatever else you want
// If the value IS what you expected, then:
// -----> update the 'undoData' by getting all values and re-stringifying them
// and storing them as a new Script/User property
}
基本上,当电子表格打开时,将所有值存储为脚本/用户属性,并且仅在满足某些单元格条件(打开)时才引用它们。当您要撤消时,获取存储在当前单元格位置的旧数据,并将当前单元格的值替换为旧数据。如果不需要撤消该值,则更新存储的数据以反映对电子表格所做的更改。
到目前为止,我的代码已经失败,我认为这是因为当对象被字符串化和存储(例如,它没有正确解析)时,嵌套数组结构丢失了。如果有人写过这种功能,请分享。否则,有关如何编写此内容的建议将很有帮助。
编辑:这些文件是令人难以置信的静态。行/列的数量不会改变,数据的位置也不会改变。如果可能的话,为临时修订历史实现一个get-all-data/store-all-data类型的函数实际上会满足我的需要。