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

本文关键字:Excel 撤消 堆栈 访问 何通过 Office Interop | 更新日期: 2024-05-04 14:32:49

我正在构建一个C#应用程序,该应用程序需要通过Office Interop与Excel电子表格进行交互。我想访问完整的撤消堆栈,这样我就可以对工作表进行一系列更改,然后在必要时一次回滚一个。我看到Interop程序集中的Word Document对象具有UndoRecord和其他一些细节,包括Undo函数。例如,我可以用一个参数调用Microsoft.Office.Interop.Word_Document.Undo()来撤消多个操作。另一方面,Excel的撤销功能看起来要有限得多。当然,有Microsoft.Office.Interop.Excel_Application.Undo(),但它只深入一个操作,如果再次调用,则执行"重做",而不是深入堆栈。

我在网上找到了VBA开发人员为Excel编写自己的撤消历史记录的代码,因为这是获得所需功能的唯一方法。不过,我在C#中看不到这样的东西。有什么方法可以模仿Word的Interop撤消在Excel中的工作方式吗?

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

唉,Word的正确之处不在Excel。可能是因为写Word VBA的人太多了:)。请参阅John Walkenbach页面,了解Excel VBA(和interop)中的功能。以下是他的部分描述:

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

编辑:

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

应用程序撤消方法

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

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

关于Interop,我确信VBA本身没有任何可用的东西。