在我的应用程序中,我打开一个带有宏的 .xlsm 文件(将数据复制到 .xlsm 文件)和一个执行该宏的 .xlsx 文件。假设我的文件名为 FileWithMacro.xlsm
和 FileThatExecutesMacro.xlsx
。我需要在服务器上使用这个应用程序,但它是在本地开发的。为了调试应用程序,我将文件放在 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"];
之后,我调用运行宏的方法:
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
}
宏在本地工作没有任何问题。当我更改所有路径并将我的代码输出复制到服务器 (\\myServer\someUrl...) 时,出现以下异常:
'C:\Users\myServerUser\Documents\FileWithMacro.xlsm' could not be found.
尽管我将所有路径更改为正确的服务器位置(而且我非常确定我的代码和宏中不再有本地路径)。我什至删除了我的 bin
和 obj
文件夹并重建了项目,但这并没有改变任何东西。我什至创建了一个新项目并在不使用本地路径的情况下构建它,但我遇到了同样的错误。我究竟做错了什么? excel.Run
是否默认在 Documents
文件夹中搜索宏?
或者问题是因为我的宏中的 Windows("FileWithMacro.xlsm").Activate
行?手动运行宏时,它工作正常。通过代码运行它时它只是不起作用。
最佳答案
我无法找出为什么会出现异常。但是,我找到了解决方法。在执行宏之前,我将 FileWithMacro.xlsm
复制到错误消息中的位置。当我像以前一样使用代码时,我收到一条消息,提示 FileWithMacro.xlsm
已在使用中。要解决此问题,我只需将 Excel.Application
传递给我的方法并使用此实例而不是创建新实例:
private static void RunMacro(Excel.Application excel, string source)
关于c# - 通过服务器 : Wrong path to excel file? 上的代码运行宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42026372/