通过服务器上的代码运行macros:错误的path到Excel文件?

在我的应用程序中,我打开一个带有macros(将数据复制到.xlsm文件)的.xlsm文件和一个执行该macros的.xlsx文件。 假设我的文件被称为FileWithMacro.xlsmFileThatExecutesMacro.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)。 我甚至删除了我的binobj文件夹,重build了这个项目,但是这并没有改变任何东西。 我甚至创build了一个新的项目,并build立它不使用本地path,但我得到了同样的错误。 我究竟做错了什么? 默认是在excel.RunsearchDocuments文件夹中的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)