Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Office Interop从C#访问Excel中的撤消堆栈?_C#_Excel_Ms Word_Office Interop - Fatal编程技术网

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

如何通过Office Interop从C#访问Excel中的撤消堆栈?,c#,excel,ms-word,office-interop,C#,Excel,Ms Word,Office Interop,我正在构建一个C#应用程序,它需要通过Office Interop与Excel电子表格交互。我希望能够访问完整的撤消堆栈,以便对工作表进行一系列更改,然后在必要时一次回滚一个。我看到互操作程序集中的Word文档对象具有UndoRecord和其他一些细节,包括一个Undo函数。例如,我可以使用参数调用Microsoft.Office.Interop.Word.\u Document.Undo(),以撤消多个操作。另一方面,Excel的撤销功能看起来更加有限。当然,还有Microsoft.Offic

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


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

唉,Word的情况不适用于Excel。可能是因为越来越多的人写VBA:)。有关Excel VBA(和互操作)中可能的内容,请参见此。以下是他的部分描述:

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

编辑:

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

应用程序。撤消方法

取消上一个用户界面操作

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


特别是在互操作方面,我确信VBA本身没有其他可用的工具。

唉,Word的适用范围并不局限于Excel。可能是因为越来越多的人写VBA:)。有关Excel VBA(和互操作)中可能的内容,请参见此。以下是他的部分描述:

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

编辑:

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

应用程序。撤消方法

取消上一个用户界面操作

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


特别是在互操作方面,我确信VBA本身没有什么不可用的功能。

但是,用户采取的操作如何?是否无法通过互操作打开工作表,让用户在单元格中键入内容等,然后通过编程撤消其操作?但是,用户采取的操作又如何呢?是否无法通过互操作打开工作表,让用户键入单元格等,然后通过编程撤消其操作?