用于调用 Excel VSTO 外接程序中的事件的外部应用程序

本文关键字:事件 外部 应用程序 程序 调用 Excel VSTO 用于 | 更新日期: 2023-09-27 18:35:53

Excel 加载项中的Refresh按钮/方法需要通过外部 winform 应用程序调用。这是我要做的地方:

private Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
public FormMain()
{
InitializeComponent();
RefreshExcelSheet(@C:'a.xls");
} 
private bool RefreshExcelSheet(string path)
        {
           using (var wb = excel.Workbooks.Open(path).WithComCleanup())

如何单击"刷新"按钮或仅调用其事件?

正在查看这些文章,但它们使用的是 VBA,我想要一个 Winform 应用程序来打开电子表格并单击按钮:
从 VBA 访问 VSTO 应用程序加载项类型 (Excel)
向没有本地管理员的 VBA 公开 VSTO 功能

用于调用 Excel VSTO 外接程序中的事件的外部应用程序

解决此问题的最简单方法是将现有的自定义 .net 方法公开为 COM 方法,方法是将 COM 方法设为可调用包装对象 (CCW)。VSTO 提供了一种公开 COM 自动化服务器的简单方法。

http://blogs.msdn.com/b/andreww/archive/2007/01/15/vsto-add-ins-comaddins-and-requestcomaddinautomationservice.aspx

由操作编辑:安德鲁·怀特查佩尔(Andrew Whitechapel)更新了这篇文章,但我无法让它工作。即使使用StandardOleMarshalObject并注册COM互操作,我仍然会收到与本文中详述的相同的错误消息:http://blogs.msdn.com/b/andreww/archive/2008/08/11/why-your-comaddin-object-should-derive-from-standardolemarshalobject.asp

如果可以扩展 Excel 加载项,匿名类型的建议肯定是最佳方法。

如果是第三方工具,仍然可以使用功能区的 IAccessible 接口来调用功能区按钮。但是,您可以预期这会复杂得多。如果您必须遵循该路径,这里有一些链接可以帮助您入门:

  • 如何获取功能区自定义选项卡 ID?
  • http://www.codeproject.com/Articles/38906/UI-Automation-Using-Microsoft-Active-Accessibility