当用户取消文件覆盖时,Excel COMException 0x800A03EC

时间:2010-08-06 21:29:36

标签: c# excel interop

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

参考:Microsoft Excel 12.0对象库

excelWorkbook.SaveAs(resultsFilePath, XlFileFormat.xlExcel8);

2 个答案:

答案 0 :(得分:3)

将它放在Try / Catch块中,您应该使用任何可能失败的代码吗?如果它在try / catch块中,那么根据你给我们的信息,设计是有缺陷的,因为......

  1. ExcelWorkbook.Save()函数是您无法更改的。它就是它......
  2. 它失败了,因为用户取消了保存,并且你在没有先检查文件是否存在的情况下调用SaveAs方法,如果Excel提示用户给他们取消的机会,唯一的选择就是这个错误,那么唯一的另一个选择是不给用户那个选择。
  3. 作为一般性建议,我会说你应该检查文件是否存在,并让用户有机会在你的代码中取消。如果他们取消,问题就避免了。如果他们选择不取消,只需在调用Excel Save()函数之前删除该文件。

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

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

答案 1 :(得分:1)

这个怎么样:

try
{
   excelWorkbook.SaveAs(resultsFilePath, XlFileFormat.xlExcel8);
}
catch // If you want, you can try and catch the actual exception here
{
   // If it gets here, the user probably cancelled (or something else
   // went wrong) You should handle those cases as needed. In the case
   // of the user cancelling, just do nothing here!
}