我在我的项目中有以下的 C# 函数,它的功能是打开并返回一个现有的 Excel 工作簿对象:
Application _excelApp;
// ...
private Workbook OpenXL(string path, string filename)
{
try
{
if (_excelApp == null)
{
_excelApp = new Application();
}
Workbook workBook = _excelApp.Workbooks.Open(path + filename, // Name
0, // Do not update links
true); // Open read-only
return workBook;
}
catch (Exception e)
{
_excelApp = null;
throw new ArgumentException("Error opening " + path + filename, e);
}
}
但是当我使用 "C:\" 和 "scratch.xlsx" 运行它时,Open() 调用会抛出以下错误:Microsoft Excel cannot access the file 'C:\scratch.xlsx'. There are several possible reasons:
• The file name or path does not exist.
• The file is being used by another program.
• The workbook you are trying to save has the same name as a currently open workbook.
文件和路径确实存在:我已经从错误消息中复制了路径并将其粘贴到命令窗口中,在Excel中加载文件。该文件没有被锁定:Excel可以正常打开它,但我的程序不能,即使在重新启动后也是如此。我试图打开它而不是保存它,因此最后一个选项无关紧要。我不知道为什么这个简单的代码没有起作用。任何建议都将不胜感激。
[编辑]我现在已经尝试从我的个人网络驱动器(M:)和USB存储器中打开该文件,但都没有成功。
该应用程序实际上是一个Windows服务,以本地系统帐户运行并生成报告。它目前编写CSV报告,并且没有任何访问问题。我现在正在尝试打开一个Excel文件作为模板报告并填写各种字段。当打开Excel文件时,它就会失败。我认为管理员帐户选项就是大家所提议的红鲱鱼,因为它可以毫无问题地编写CSV文件。
---Alistair。
\
? - Kamipath + filename
这样拼接路径,而应该使用Path.Combine(path, filename)
! - Marco