如何通过Office Interop从C#访问Excel中的撤消堆栈?

我正在构build一个需要通过Office Interop与Excel电子表格交互的C#应用​​程序。 我想访问完整的Undo堆栈,以便我可以对工作表进行一系列更改,然后根据需要一次将其滚回一个。 我发现Interop程序集中的Word Document对象具有UndoRecord和其他一些细节,包括Undo函数。 例如,我可以使用参数调用Microsoft.Office.Interop.Word._Document.Undo()来撤消多个操作。 另一方面,Excel的“撤销”function看起来更有限。 当然,有Microsoft.Office.Interop.Excel._Application.Undo(),但它只深入一个动作,如果再次调用执行“重做”,而不是更深入的堆栈。

我在网上find了代码,VBA开发人员编写了自己的Undo Undo历史logging,因为这是获得所需function的唯一方法。 虽然我没有看到这样的C#的东西。 有什么办法来模仿Word的互操作撤消在Excel中工作的方式吗?

唉,Word的真实情况不适用于Excel。 可能是因为这么多人写Word VBA :)。 在Excel VBA(和interop)中可以看到John Walkenbach的这个页面 。 这是他的描述的一部分:

使您的子例程可撤销的效果不是自动的。 你的子程序将需要存储以前的状态,所以如果用户select编辑撤消命令可以恢复。 你怎么做会有所不同,这取决于子程序的作用。 在极端情况下,您可能需要保存整个工作表。 例如,如果您的子程序修改范围,则只需要保存该范围的内容。

编辑:

Application.Undo方法,但它是非常有限的。 以下是Excel 2010 VBA帮助的说明:

Application.Undo方法

取消最后一个用户界面操作。

备注此方法在运行macros之前只取消用户最后一个操作,它必须是macros中的第一行。 它不能用于撤消Visual Basic命令。

特别是对于Interop,我确定没有任何可用的东西不在VBA中。