我正在尝试自动化Excel外接程序的一些测试,它是以xll形式出现的。我在加载xll时遇到了一些问题。我正在用C#编写它,我的代码如下所示:
using Microsoft.Office.Interop.Excel;
Application xlApp;
Workbook xlWorkBook;
Worksheet xlWorkSheet;
// create application, open workbook, etc ...
// now try to register xll
xlApp.RegisterXLL("C:\\SomePath\\Whatever.xll");但是,这总是返回false。我试图通过记录宏来查看Excel在手动加载xll时所做的秘密工作。宏如下所示:
Sub Macro1()
ChDir "C:\SomePath"
Application.RegisterXLL Filename:= _
"C:\SomePath\Whatever.xll"
End Sub唯一的区别似乎是ChDir,因此我将代码更改为:
FileSystem.ChDir("C:\\SomePath");
xlApp.RegisterXLL("C:\\SomePath\\Whatever.xll");但还是没用。另一件奇怪的事情是,当我在RegisterXLL行前面放置一个断点并首先手动加载xll时,RegisterXLL方法将返回true。但否则,它将返回假。
发布于 2010-07-19 13:18:34
谢谢你的建议。
我通过更改Excel应用程序的默认文件路径来解决这个问题。
Application.xlApp = new ApplicationClass();
xlApp.DefaultFilePath = "C:\\SomePath";
xlApp.RegisterXLL("Whatever.xll");发布于 2010-07-07 16:32:03
是的,ChDir命令可能很重要。它帮助Windows查找whatever.xll所依赖的任何DLL。它没有解决问题的原因是FileSystem.ChDir()更改了测试程序的工作目录,而不是Excel。
不是你能做的那么多。部署xll执行系统路径上的目录将解决这个问题。一个务实的解决方案就是运行这个宏。
发布于 2010-07-07 18:55:10
我知道这并不能直接回答您的问题,但是您可能想看看如何在Visual中使用VSTO。VSTO自动化了许多这类问题。VS 2010中的版本比以前要好得多,您可以构建应用程序级外接程序,而不仅仅是文档级外接程序。如果需要用户定义的函数,可以使用COM外接程序,如下所述:
http://blogs.officezealot.com/whitechapel/archive/2005/04/10/4514.aspx
它最初是以本条为基础的:
http://blogs.msdn.com/eric_carter/archive/2004/12/01/273127.aspx
我们使用VSTO的组合作为我们的主要应用程序,COM外接程序用于用户定义的函数。更好的是,它们被加载在同一个应用程序域中,这样它们就可以互相交谈了。
https://stackoverflow.com/questions/3196505
复制相似问题