用于在Excel VSTO加载项中调用事件的外部应用程序

时间:2012-06-01 06:05:12

标签: c# winforms excel vsto invoke

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

2 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是将现有的自定义.net方法公开为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

答案 1 :(得分:0)

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

如果它是第三方工具,仍然可以使用功能区的IAccessible接口来调用功能区按钮。但是,您可以预期这会复杂得多。如果您必须遵循该路径,请访问以下链接: