【问题标题】:external application to invoke an event in a Excel VSTO add-in外部应用程序调用 Excel VSTO 加载项中的事件
【发布时间】:2012-06-04 08:39:58
【问题描述】:

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

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 应用程序来打开电子表格并单击按钮:
Accessing a VSTO application-addin types from VBA (Excel)
Expose VSTO functionality to VBA w/o local admin

【问题讨论】:

    标签: c# winforms excel vsto invoke


    【解决方案1】:

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

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

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

    【讨论】:

    • 我将针对这篇文章遇到的问题提出一个新问题。
    【解决方案2】:

    如果您可以扩展 Excel 插件,匿名类型的建议肯定是最好的方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多