Excel Interop SaveAs()方法的替代方法
本文关键字:方法 Interop SaveAs Excel | 更新日期: 2023-09-27 17:57:44
我们使用excel interop在windows服务中创建excel报告。在Windows7操作系统中一切正常。但当该服务部署在Win2K8R2服务器上时,观察到在使用"SaveAs()"方法保存excel文档时引发了以下异常。
异常-HRESULT:0x800A03EC
经过研究,我们知道,我们需要使用"SaveCopyAs()"或使用"Close()"代替SaveAs()方法。我尝试使用"SaveCopyAs()"方法,发现excel报表创建工作正常,但任务管理器中的"excel.exe"仍然存在。这是内存泄漏问题。
因此,使用了"Close(true,filename,false)"方法,一切都很好,包括清除任务管理器中的"Excel.exe"进程。
考虑了一种通用机制来处理COM对象,即在测试的两个场景使用后将对象分配为null。
现在,我对推进它的正确方法感到困惑。请澄清。
查看Open XML SDK
Microsoft不建议Office Interopt用于服务器自动化
如何:通过提供文件名(Open XML SDK)创建电子表格文档
也有像Aspose 这样的商业包装
以及免费软件包,如EPPlus。
尝试使用"SaveCopyAs()"方法,发现excel报表创建工作正常,但任务管理器中的"Excel.exe"仍然存在。
-->这可能是因为您的工作簿未关闭。
-->在为excel对象指定null之前,请使用Marshal.ReleaseComObject()方法。