2017-04-13 72 views
0

我的Excel可以通过AddIn从数据提供者下载数据。 从提供的帮助页面,我发现了(和测试),它可以通过调用VBA以下命令“刷新”的数据:来自C的Excel COM插件的调用方法#

Application.COMAddIns("PowerlinkCOMAddIn.COMAddIn").Object.RefreshWorkbook 

花了几个小时的搜索后,互联网我无法找到一个答案,我可以通过使用C#调用完全相同的方法。

由于我有很多这些电子表格需要定期更新,我正试图自动化这个过程。

  1. 一种方式来实现或许这将是我打开电子表格与上面的命令,并把它称为一个新的宏每次注射,但我宁愿直接与C#如果可能的话调用它。
  2. 第二种解决方案是使用Python或其他语言以 下载CSV格式的数据并将我的电子表格链接到CSV 但这个过程似乎也是一种矫枉过正。

非常感谢提前。

+1

dynamic obj =应用程序...对象; obj.Whatever(); –

+0

谢谢你。根据您的示例,我现在已经更改了我的代码。 dynamic obj = Application.COMAddIns(“PowerlinkCOMAddIn.COMAddIn”)。Object但是当我尝试运行obj.RefreshWorkbook()时,它表示该方法不存在。任何想法? – stratar

+0

我最终解决了一个问题:通过C#编程插入(注入)Sub过程到VBA模块中,然后调用上面的代码。我使用这个解决方案时遇到的问题是,有时当试图运行宏时,我得到了一个错误438.在打开Excel之后,我通过使用System.Threading.Thread.Sleep(10000)来设法摆脱它,这意味着我得到了错误,因为当我想运行VBA代码时,可能没有加载COM Addin。那么,现在的问题就变成了:“在我尝试访问它们之前,如何确保Excel中的所有Addins都已加载”? – stratar

回答