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

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

参考:Microsoft Excel 12.0对象库

excelWorkbook.SaveAs(resultsFilePath, XlFileFormat.xlExcel8); 

把它放在一个Try / Catch块,你应该可能会失败的代码? 如果它处于try / catch块中,那么根据您提供的信息,devise的定义是有缺陷的,因为….

  1. ExcelWorkbook.Save()函数是你不能改变的东西。 就是这样…
  2. 它失败了,因为用户取消了保存,并且在调用SaveAs方法时没有先检查文件的存在,如果Excel提示用户给他们取消的机会,唯一的select是这个错误,那么只有其他的select是不给用户的select。

作为一般的build议,我会说你应该检查文件的存在,并给予用户在你的代码中取消的机会。 如果他们取消,问题避免。 如果他们select不取消,只需在调用Excel Save()函数之前删除该文件即可。

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

(如果你问,我知道处理来自C#的可选参数是一个痛苦,所以检查出这个问题是如何处理这些…)

这个怎么样:

 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! }