【问题标题】:Excel DNA and Excel Add In COMExcel DNA 和 Excel 添加 COM
【发布时间】:2018-07-13 04:21:19
【问题描述】:

我以前有使用 Excel 加载项 vsto COM 对象的经验。特别是使用 Excel.Interop dll 创建一个工作表并用数据填充它。以及,通过使用工作表更改事件来更新数据,通过 c# 与工作表交互。我想探索 Excel DNA 并可能使用它。我对 excel dna 完全陌生,但是在研究它时,我只发现了创建函数和带有按钮的功能区的示例,但我还没有看到一种方法来创建工作表并从数据表中填充它。

Excel DNA 是否仅用于创建 excel 插件,如果我想创建一个工作表,用数据填充它并有我需要使用 excel.interop dll 或 OpenXML 的事件?

【问题讨论】:

    标签: c# excel-addins excel-dna


    【解决方案1】:

    Excel-DNA 旨在让您在 Excel 中运行 .NET 代码。例如,如果您想在 Excel 中使用自定义功能区,单击该按钮将运行一些 .NET 代码以创建新工作簿并填充一些数据等,然后 ... Excel-DNA 是一个很好的工具

    如果您想在 Excel 之外创建 Excel 文件,例如在控制台应用程序或 Windows 服务中,那么 Excel-DNA 不是正确的工具,您应该考虑使用Excel.Interop 如果您知道您的应用程序将在安装了 Excel 的机器上运行,或者其他替代方案(例如 ClosedXml 和其他 OpenXml 兼容工具)将生成 Excel 文件无需需要 Excel安装在机器上。

    【讨论】:

    • 嗨,我明白了,也许我的问题不清楚,但我问的是我是否使用 excel dna 希望有一个功能区和一个按钮来创建一个 excel 工作簿/工作表我还需要吗使用 Excel.Interop 写入 excel 还是 Excel dna 有自己的方式来处理 excel?
    • @JoeyDiaz 您“需要”使用Excel.Interop,但我建议您使用它。您可以直接通过dynamic 变量使用ExcelDnaUtil.Application,而不需要@Govert 在他的回答中详细解释的Excel.Interop...但是,使用Excel.Interop 使开发变得更加容易,因为您获得了IntelliSense ...
    【解决方案2】:

    您可以从 Excel-DNA 加载项中完全访问 Excel COM 对象模型。一个重要步骤是,您必须为托管加载项的 Excel 实例获取正确的 Application 根对象。 (只需调用 new Application() 可能会获取另一个 Excel 实例。)要获取 Application 对象,您调用 ExcelDnaUtil.Application - 返回 COM 对象。

    从那里您可以使用 C# 中的dynamic 支持与对象模型对话。但更好的是引用 Interop 程序集,为您提供 IntelliSense 和早期绑定。

    引用一组互操作程序集(对应于 Excel 2010 对象模型)的一种便捷方法是从 NuGet 安装 ExcelDna.Interop 包。使用 .NET 4 中的“嵌入互操作类型”功能(默认设置为 true),您无需重新分发任何特殊内容,并且您的代码将与所有 Excel 版本兼容,只要您使用的对象模型部分是那里支持。

    作为运行 COM 代码的入口点,您可以创建宏、快捷功能区或上下文菜单。您还可以从对象模型中挂钩 COM 事件。

    available on GitHub 是一个简单的示例,其中包含有关制作功能区按钮然后运行一些 COM 代码的详细说明。

    请注意,COM 对象模型顶部的 VSTO 包装器(Microsoft.Office.Tools.Excel 命名空间中的所有内容)与您的 Excel-DNA 加载项不兼容,因此您必须自己基于本机实现该功能COM 对象模型(Microsoft.Office.Interop.Excel 命名空间中的类型。)

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 2018-06-08
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多