通过服务器上的代码运行macros:错误的path到Excel文件?
在我的应用程序中,我打开一个带有macros(将数据复制到.xlsm文件)的.xlsm文件和一个执行该macros的.xlsx文件。 假设我的文件被称为FileWithMacro.xlsm
和FileThatExecutesMacro.xlsx
。 我需要在服务器上的这个应用程序,但已经在本地开发。 为了debugging应用程序,我把我的文件放到C:\Users\myUser\Documents\
。
我打开这样的FileWithMacro.xlsm
:
Excel.Application excel = new Excel.Application(); Excel.Workbook workbook = excel.Workbooks.Open(serverPath + "FileWithMacro.xlsm"); Excel._Worksheet worksheet = workbook.Sheets["FileThatExecutesMacro"];
之后,我调用运行macros的方法:
RunMacro(serverPath + "FileThatExecutesMacro.xlsx");
我的方法如下所示:
private static void RunMacro(string source) { Excel.Application excel = new Excel.Application(); Excel.Workbook workbook = excel.Workbooks.Open(source); Excel._Worksheet worksheet = workbook.Sheets[1]; worksheet.Activate(); try { excelThatRunsMacro.Run("FileWithMacro.xlsm!MyMacro"); workbook.Save(); excelThatRunsMacro.Quit(); } // and so on }
macros的本地工作没有任何问题。 当我改变所有的path,并将我的代码的输出复制到服务器(\\ myServer \ someUrl …),我得到以下exception:
找不到“C:\ Users \ myServerUser \ Documents \ FileWithMacro.xlsm”。
虽然我把所有的path改成了正确的服务器位置(我确信我的代码和macros中没有本地path)。 我甚至删除了我的bin
和obj
文件夹,重build了这个项目,但是这并没有改变任何东西。 我甚至创build了一个新的项目,并build立它不使用本地path,但我得到了同样的错误。 我究竟做错了什么? 默认是在excel.Run
searchDocuments
文件夹中的macros?
或者是因为行Windows("FileWithMacro.xlsm").Activate
我的macros吗? 手动运行macros时,它工作正常。 通过代码运行时,它不起作用。
我找不到为什么我得到了例外。 不过,我find了一个解决方法。 在执行macros之前,我将FileWithMacro.xlsm
复制到错误消息中的位置。 当我使用代码时,我已经得到了FileWithMacro.xlsm
已经被使用的消息。 要解决这个问题,我只需要将Excel.Application
传递给我的方法,并使用这个实例,而不是创build一个新的:
private static void RunMacro(Excel.Application excel, string source)