代码之家  ›  专栏  ›  技术社区  ›  skeletank

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

  •  3
  • skeletank  · 技术社区  · 15 年前

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

    excelWorkbook.SaveAs(resultsFilePath, XlFileFormat.xlExcel8);
    
    2 回复  |  直到 15 年前
        1
  •  3
  •   Community CDub    8 年前

    把它放在Try/Catch块中,就像处理任何可能失败的代码一样?如果它在一个try/catch块中,那么根据你给我们的信息,这个设计在定义上是有缺陷的,因为。。。。

    1. 它失败是因为用户取消了保存,而您调用SaveAs方法时没有首先检查文件是否存在,并且如果Excel提示用户给他们取消的机会,并且唯一的选项是此错误,那么唯一的其他选项是不给用户该选择。

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

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

    (为了以防万一,我知道处理C#中的可选参数是一件痛苦的事,所以请查看 this previous question

        2
  •  1
  •   sidewinderguy    15 年前

    这个怎么样:

    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!
    }
    
    推荐文章