Excel 公开 COM API 与 C-API 的方式有什么区别

What is the difference between how Excel exposes the COM API compared to the C-API

我正在使用 ExcelDNA 库,它似乎结合使用了 Excel 的 C-API 和 COM 接口。

这些接口在 Excel 的实现方面有何不同?来自 Microsoft 站点 (https://msdn.microsoft.com/en-us/library/office/bb687829.aspx):

自定义 Excel 用户界面

对于 Excel 的许多版本,C API 并不是自定义用户界面的最佳选择。 VBA 具有对 Excel 对象和事件的高级访问权限。 Excel 2007 年引入的用户界面在外观和底层技术上都与早期版本有很大不同。您可以使用托管代码资源自定义此界面。"

是什么让 COM 比 C-API 更适合编辑 Excel 的 UI?

使用 VBA 或 .NET 而不是 C 或 C++ 来编写用户界面内容更容易、更快速。

COM 接口比 C-API 接口可以访问更丰富的 Excel 对象和事件集,但 C-API 更适合编写 UDF,因为它性能比 COM 好得多,并允许 COM 不提供的多线程、异步、RTD、集群等功能。

请注意,使用来自 ExcelDNA 的 COM 意味着使用本质上很慢的 COM-INTEROP。

我同意 Charles 关于构建 UI 组件和使用 C# 和 Excel DNA(或公平的 Addin Express)快速构建新功能原型的简易性和较低 TCO 的观点。

在宣布性能至高无上之前,请设定一些期望并衡量所涉及的计算或事件。如果确实存在性能敏感部分,请将其隔离,然后编写托管 C++ 代码,然后可以将这些代码与用 C# 编写的 UI 或 VB.NET.

集成

此外,只是对查尔斯关于 Excel DNA 和 VBA 的评论的一个小修正;他们一起工作。可以在以下位置找到几个示例: