c# - 当用户取消文件覆盖时出现 Excel COMException 0x800A03EC

标签 c# excel interop

我有代码将 excel 文件保存到特定位置和用户无法更改的文件名。当文件不存在并静默保存时,它工作正常。如果该文件已经存在并且用户选择覆盖它,那么它也可以正常工作。当它已经存在并且用户取消保存时会出现问题。这会导致抛出 COMException 0x800A03EC。有什么想法吗?

引用资料:Microsoft Excel 12.0 对象库

excelWorkbook.SaveAs(resultsFilePath, XlFileFormat.xlExcel8);

最佳答案

将它放在一个 Try/Catch block 中,就像您应该处理任何可能失败的代码一样?如果它在 try/catch block 中,那么根据您提供给我们的信息,设计在定义上是有缺陷的,因为......

  1. ExcelWorkbook.Save() 函数是您无法更改的。就是这样……
  2. 失败是因为用户取消了保存,而您调用 SaveAs 方法时没有先检查文件是否存在,如果 Excel 提示用户给他们取消的机会,唯一的选择就是这个错误,那么唯一的选择就是不给用户那个选择。

作为一般性建议,我会说您应该检查文件是否存在,并让用户有机会在您的代码中取消。如果他们取消,问题就避免了。如果他们选择不取消,只需在调用 Excel Save() 函数之前删除文件即可。

或者,您可以使用 SaveAs()函数而不是 Save(),并将名为 ConflictResolution 的可选参数设置为 XlSaveConflictResolution.xlLocalSessionChanges

(以防万一你问,我知道处理来自 C# 的可选参数很痛苦,所以查看 this previous question 了解如何处理这些......)

关于c# - 当用户取消文件覆盖时出现 Excel COMException 0x800A03EC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427934/

相关文章:

c# - 捕获所有错误,而不仅仅是单个按钮

c# - 在 C# 中使用 XML 的 jQuery 语法

excel - 谷歌表格/Excel - "if A, then B, if D, then E"匹配

c - 使用 OpenCL 传输

c# - 微软是否更改了随机默认种子?

c# - 在 ASP.Net Core 中获取基本 URL

excel - Excel 2010中日期范围内的条件格式单元格?

python - 选择要从 Excel 读入 pandas 数据框的行号

c# - 如何创建 SafeArray C#?

javascript - 如何在 Blazor 组件中引用本地 JS 模块?