我很清楚 Microsoft 支持基础文章指出不支持自动化办公产品 UI 较少。似乎Windows Server 2008 x64 和 Excel 2007强制执行给定的语句。
我在 NT 服务(本地系统帐户)的 OnStart 方法中运行以下代码。当您在控制台应用程序中运行相同的代码时,它所做的只是 Excel 自动化。
提供的代码有两部分。第一部分启动 Excel,创建一个新工作簿并将其保存到给定的文件名。第二部分启动一个新的 Excel 实例并打开给定的文件。打开操作在此异常中结束:
无法启动服务。System.Runtime.InteropServices.COMException (0x800A03EC):Microsoft Office Excel 无法访问文件“c:\temp\test.xls”。有几个可能的原因:
• 文件名或路径不存在。• 该文件正被另一个程序使用。• 您尝试保存的工作簿与当前打开的工作簿同名。
为什么自动 excel 能够启动并将文件写入磁盘,但当它被要求“仅”打开现有文件时却失败了?
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//
string filename = "c:\\temp\\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
true,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
false,
false,
System.Reflection.Missing.Value,
false,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value);
book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
book = null;
}
finally
{
excel.Quit();
excel = null;
}
//
GC.Collect();