【问题标题】:System.Runtime.InteropServices.COMException when using Interop Word document.SaveAs method使用 Interop Word document.SaveAs 方法时出现 System.Runtime.InteropServices.COMException
【发布时间】:2021-09-10 09:00:34
【问题描述】:

基本上我需要创建一个 PDF 存档器,将 MailItem 的内容保存到 PDF 文件中。 代码如下:

        mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
        string pdfPath = Path.Combine(fullPath + fileName + ".pdf");
        Microsoft.Office.Interop.Word.Document doc = mailItem.GetInspector.WordEditor;
        doc.SaveAs(pdfPath, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF);

异常发生在 .SaveAs 方法上。我基本上把它归结为,它与文件路径有关,因为我尝试将文件路径更改为更短,但没有发生异常。问题是,它必须位于较长的文件路径结构中。我也确实考虑过它可能达到了文件路径的最大长度(255),但是从运行 pdfPath.Length 可以看出,长度是 81。

有人有什么想法吗?

【问题讨论】:

  • COMException 肯定有更多细节吗?
  • @cjb110 它所说的只是“抛出异常:EmailArchiverOutlook.dll 中的'System.Runtime.InteropServices.COMException'”,堆栈跟踪仅指向 .SaveAs 方法发生的行
  • 抱歉刚刚重读了您的帖子,SaveAs 命令的路径太长(可能是由于一般历史窗口对路径长度的限制)。所以拆分它,SaveAs 到一个较短的路径,然后使用 .NET IO File 方法将它移动到最终位置。
  • 是的,有效。太感谢了!我不知道为什么我没有想到自己这样做。

标签: c# visual-studio office-interop office-addins


【解决方案1】:

我对此进行了更多研究,结果发现在使用文件路径时,您可以轻松地使用单个 / 来导航路径,例如:C:/User/Desktop

情况就是这样,UNTIL 您使用 Word 文档。 Word 不喜欢单 /,但更喜欢双 \\。所以,C:/User/Desktop 变成了C:\\User\\Desktop

我这么说的原因是,虽然有一个文件路径最大长度,但我没有达到它。

问题似乎是因为文件夹名称中有空格,例如:C:/User/Desktop/Folder Name

然后我改用双反斜杠,效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多