- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在构建一个 C# 应用程序,它需要通过 Office Interop 与 Excel 电子表格进行交互。我想获得对完整撤消堆栈的访问权限,以便我可以对工作表进行一系列更改,然后在必要时一次将它们回滚。我看到 Interop 程序集中的 Word 文档对象具有 UndoRecord 和其他一些细节,包括 Undo 函数。例如,我可以调用带有参数的 Microsoft.Office.Interop.Word._Document.Undo() 来撤消多个操作。另一方面,Excel 的撤消功能看起来更加有限。当然,有 Microsoft.Office.Interop.Excel._Application.Undo(),但它只进行一次操作,如果再次调用,则执行“重做”而不是深入堆栈。
我在网上找到了代码,其中 VBA 开发人员为 Excel 编写了他们自己的撤消历史记录,因为这是获得所需功能的唯一方法。不过,对于 C#,我没有看到类似的东西。有什么方法可以模仿 Word 的互操作撤消在 Excel 中的工作方式吗?
最佳答案
可惜,适用于 Word 的却不适用于 Excel。可能是因为写 Word VBA 的人多了 :)。看这个John Walkenbach page了解 Excel VBA(和互操作)的可能性。以下是他的部分描述:
Making the effects of your subroutines undoable isn't automatic. Your subroutine will need to store the previous state so it can be restored if the user choose the Edit Undo command. How you do this will vary, depending on what the subroutine does. In extreme cases, you might need to save an entire worksheet. If your subroutine modifies a range, for example, you need only save the contents of that range.
编辑:
有 Application.Undo
方法,但它非常有限。这是 Excel 2010 VBA 帮助中的描述:
Application.Undo Method
Cancels the last user-interface action.
Remarks This method undoes only the last action taken by the user before running the macro, and it must be the first line in the macro. It cannot be used to undo Visual Basic commands.
特别是关于 Interop,我确信 VBA 本身没有任何可用的东西。
关于c# - 如何通过 Office Interop 从 C# 访问 Excel 中的撤消堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20227078/
我正在使用 Microsoft.Office.Interop.Outlook 提取电子邮件附件: var MAPI = new Application().GetNamespace("MAPI");
突然得到一个 System.invalidcastexception: unable to cast COM object of type 'system._object' to interface
我正在尝试在兼容的渲染目标上使用 Gdi 和 Direct 2D 来渲染位图。我使用 D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE 选项创建
完整错误: Could not load file or assembly 'Interop.Microsoft.Office.Interop.Word' or one of its dependen
我正在尝试寻找一种使用 Office.Interop.Outlook COM 对象连接到其他邮箱的方法。目前我正在执行以下操作(在添加 COM 对象之后): var app = new Microso
我有一个用 C# 编写的应用程序,该应用程序当前向 LDAP 进行身份验证。我们希望扩展功能以支持 IBM 的 Tivoli Access Manager,它由一个策略服务器和一个 LDAP 服务器(
在 Visual Studio 中将 interop.excel 引用添加到我的 C# winform 后,我无法再“编辑并继续”...... 错误提示“正在修改“方法” ' 包含嵌入式互操作类型/成
我正在尝试创建 Excel 文件的 Worksheet 数组,但找不到正确的转换。 这是代码: Excel.Application app = new Excel.Application(); Exc
我正在使用 C# Interop 从工作表中获取一些值,但出现以下错误: Non-invocable member 'Microsoft.Office.Interop.Excel.Range.End'
我在 MVC 桌面应用程序中使用 Nuget 包 System.Data.SQLite。当我尝试清理解决方案时出现错误。我收到的错误消息是:无法删除文件“...bin\Debug\x64\SQLite
序列化异常:程序集“Microsoft.Office.Interop.Excel,Version=11.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e
我正在通过命令行将 magento 2.1.8 升级到 2.3.3,当我运行 composer update 命令时它显示以下错误。 包 container-interop/container-int
我正在尝试从 C# 控制台应用程序中的 Excel 中捕获一些数据。 我得到了错误 Unable to cast COM object of type 'microsoft.Office.Intero
我收到一个错误: Unable to cast COM object of type 'Microsoft.Office.Interop.Excel.ApplicationClass' to inte
我刚刚下载了 MS Visual Studio 2010 解决方案并收到该错误。 Error 1 Assembly 'Microsoft.Office.Interop.Word, Version=15
我尝试为 socket.io 编写一个绑定(bind)。 我在使用函数(底部示例代码中的 next())时遇到问题,该函数要么不带参数,要么带有错误对象( Js.Exn.raiseError("ERR
在 C++/CLI 中,是否可以固定不包含元素的数组? 例如 array^ bytes = gcnew array(0); pin_ptr pin = &bytes[0]; //。您可以回退到 GCH
我目前正在从事一个项目,该项目包含几种不同的“编程”语言,每种语言都有自己的命名约定。应该始终使用相同的命名约定,还是应该在每种语言中使用不同的名称以具有原生外观(即不与框架的其余部分冲突)? 例如,
我是Clojure和Java的新手。 为了访问Clojure中的Java字段,您可以执行以下操作: Classname/staticField 就是一样的 (. Classname staticFie
我想提取word文档中的项目符号信息。我想要这样的东西:假设下面的文字在 word 文档中: 启动汽车的步骤: 开门 坐在里面 关上门 插入 key 等等 然后我想要我的文本文件如下: 启动汽车的步骤
我是一名优秀的程序员,十分优秀!