我有代码将 excel 文件保存到特定位置和用户无法更改的文件名。当文件不存在并静默保存时,它工作正常。如果该文件已经存在并且用户选择覆盖它,那么它也可以正常工作。当它已经存在并且用户取消保存时会出现问题。这会导致抛出 COMException 0x800A03EC。有什么想法吗?
引用资料:Microsoft Excel 12.0 对象库
excelWorkbook.SaveAs(resultsFilePath, XlFileFormat.xlExcel8);
最佳答案
将它放在一个 Try/Catch block 中,就像您应该处理任何可能失败的代码一样?如果它在 try/catch block 中,那么根据您提供给我们的信息,设计在定义上是有缺陷的,因为......
- ExcelWorkbook.Save() 函数是您无法更改的。就是这样……
- 失败是因为用户取消了保存,而您调用 SaveAs 方法时没有先检查文件是否存在,如果 Excel 提示用户给他们取消的机会,唯一的选择就是这个错误,那么唯一的选择就是不给用户那个选择。
作为一般性建议,我会说您应该检查文件是否存在,并让用户有机会在您的代码中取消。如果他们取消,问题就避免了。如果他们选择不取消,只需在调用 Excel Save() 函数之前删除文件即可。
或者,您可以使用 SaveAs()函数而不是 Save(),并将名为 ConflictResolution 的可选参数设置为 XlSaveConflictResolution.xlLocalSessionChanges
(以防万一你问,我知道处理来自 C# 的可选参数很痛苦,所以查看 this previous question 了解如何处理这些......)
关于c# - 当用户取消文件覆盖时出现 Excel COMException 0x800A03EC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427934/