我有一个程序在服务器上运行,每天从网站下载.xls文件,打开它然后将其转换为.csv,以便能够正确解析它并添加到数据库.
当我在我的本地PC上运行时,一切正常,它大部分时间都在服务器上工作,但也许每周一次或两次我得到这个例外:
发生异常:System.Runtime.InteropServices.COMException(0x800A03EC):来自HRESULT的异常:0x800A03EC at Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename,Object UpdateLinks,Object ReadOnly,Object Format,Object Password,Object WriteResPassword, Object IgnoreReadOnlyRecommended,Object Origin,Object Delimiter,Object Editable,Object Notify,Object Converter,Object AddToMru,Object Local,Object CorruptLoad)
这是一段代码片段:
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook wbWorkbook = app.Workbooks.Open(_dir + _fileNameTrim + ".xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wbWorkbook.SaveAs(_dir + _fileNameTrim + ".csv", Microsoft.Office.Interop.Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wbWorkbook.Close(false, "", true);
Run Code Online (Sandbox Code Playgroud)
我在线阅读了很多东西,很多解决方案都提到了安全设置,但我不认为这是我的情况,否则它根本不会起作用.人们还提到文件已损坏.我真的不确定.任何帮助将非常感激.
更新:
Excel安装在服务器上,尝试打开文件时发生异常.
Excel Interop正在从已处理的文件中删除图像.
我正在使用Excel Interop,没有第三方组件(我知道).工作流程是 - 创建文件(模板)的副本(目标),填充单元格,更改单选按钮状态
在我的开发机器上,目标文件看起来很棒 - 所有内容都已填充,图像存在.注意:在我的开发机器上,我正在运行VS2010 IDE中的代码.
在生产机器上 - 一切都已填充,但图像不存在.相反,会出现以下错误: NB:在生产计算机上,它作为服务运行,具有本地服务帐户.
"在文件中找不到关系ID为rId1的图像部分"
通过以下代码打开整个工作簿:
var workbook = workbooks.Open(targetPath
0, false, 5, Type.Missing, Type.Missing, false, XlPlatform.xlWindows, "",
true, false, 0, true, false, false);
Run Code Online (Sandbox Code Playgroud)
请注意,代码中不会处理带有图像的工作表.
工作簿(和个人工作表)受到保护.但是,受保护的模板在开发中正确处理,但不在生产中.我不认为保护与它有任何关系(但谁知道,对吧?这是Interop.呃).
该文件由另一方创建,所有组件(即图像)都位于.xslm结构中,而不是作为另一个服务器的链接.
我已经验证图像在模板文件中的生产计算机上可见,但不在处理过的文件中.
为了确认这不是在制作中打开文件的问题,我通过电子邮件发送了一份副本,图像仍然不存在.
我还确认,在我的开发机器上,处理过的文件确实有可见的图像.
我不保护工作表,并解压缩文件结构..jpg文件确实不存在于生产机器的已处理目标中.
还有一个注意事项 - Office 2010安装在我的开发计算机上,但是Office 2007安装在生产计算机上.结果,我正在使用Office 12 Interop.在任一环境中都不会生成运行时错误.
我正在使用Interop(而不是OpenXml库),因为存在必须填充的ActiveX控件.但请注意,没有任何ActiveX控件存在任何问题 - 它们工作正常.它只是从处理过的文件中消失的图像文件(它们在模板文件中呈现得很好).
更新说明:还有其他四个图像文件,全部.emf
在不同的工作表上; 他们都被剥夺了.
我正在尝试将图像添加到第3行第1列的Excel单元格中,如下所示.编译器给了我一个错误.我在这里做错了吗?提前感谢您的建议.
Excel.Application xlApp;
Excel.Workbook wb;
Excel.Worksheet ws;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.Application();
wb = xlApp.Workbooks.Add(misValue);
ws = (Excel.Worksheet)wb.Worksheets.get_Item(1);
ws.Cells[3, 1] = ws.Shapes.AddPicture("C:\\photos\\4a.png", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 75, 75, 350, 50);
Run Code Online (Sandbox Code Playgroud)