我有代码将excel文件保存到用户无法更改的特定位置和文件名。当文件不存在并以静默方式保存时,它可以正常工作。如果文件已经存在并且用户选择覆盖它,那么它也可以正常工作。当它已经存在并且用户取消保存时会发生此问题。这会导致抛出COMException 0x800A03EC。有什么想法吗?
参考:Microsoft Excel 12.0对象库
excelWorkbook.SaveAs(resultsFilePath, XlFileFormat.xlExcel8);
答案 0 :(得分:3)
将它放在Try / Catch块中,您应该使用任何可能失败的代码吗?如果它在try / catch块中,那么根据你给我们的信息,设计是有缺陷的,因为......
作为一般性建议,我会说你应该检查文件是否存在,并让用户有机会在你的代码中取消。如果他们取消,问题就避免了。如果他们选择不取消,只需在调用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!
}