VB.net Excel ExportAsFixedFormat从HRESULT失败异常:0x80010105(RPC_E_SERVERFAULT))

时间:2017-01-13 16:59:21

标签: excel vb.net

我正在尝试编写一个非常简单的VB.net应用程序,它可以打开一个excel文件并将其保存为excel。

我正在处理的环境如下:

  • Windows 10
  • Visual Studio 2016
  • Office 2016

我已成功设法打开Excel工作表并保存到其他位置。但是,当尝试打开excel并另存为pdf时,我收到以下错误消息

  

服务器引发了异常。 (来自HRESULT的异常:0x80010105(RPC_E_SERVERFAULT))

查看错误的详细信息,我可以看到以下内容:

  

System.Runtime.InteropServices.COMException   {“服务器引发异常。(HRESULT异常:0x80010105(RPC_E_SERVERFAULT))”}

     
    

错误代码:-2147417851

  

我用来执行此操作的代码如下:

Dim xlApp As New Excel.Application
    Dim xlWorkBook As Excel.Workbook
    Dim xlWorkSheet As Excel.Worksheet
    xlApp.Visible = False
    xlApp.AlertBeforeOverwriting = False

    Dim sheetname As String = "d:\test\test.xlsx"

    xlWorkBook = xlApp.Workbooks.Open(sheetname)


    xlWorkBook.Activate()
    xlWorkSheet = xlWorkBook.Sheets("Sheet1")
    xlWorkSheet.Activate()
    xlApp.DisplayAlerts = False
 xlWorkSheet.ExportAsFixedFormat(Type:=Excel.XlFixedFormatType.xlTypePDF, Filename:=
    "d:\test\test.pdf", Quality:=Excel.XlFixedFormatQuality.xlQualityStandard _
    , IncludeDocProperties:=True, IgnorePrintAreas:=True, OpenAfterPublish:=
    False)





    xlWorkBook.Close(SaveChanges:=False)
    xlApp.Quit()
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) : xlApp = Nothing
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook) : xlWorkBook = Nothing
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet) : xlWorkSheet = Nothing

帮助!

由于Excel工作表中包含公式,将内容复制并粘贴到新工作表中(仅粘贴特殊值和数字格式)并运行上面的代码

,因此似乎出现

问题

2 个答案:

答案 0 :(得分:0)

将它保存为.PDF:

xlWorkSheet.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, "d:\test\test.pdf")

答案 1 :(得分:0)

右键!感谢所有想要帮助的人。通过阅读你的回答,我一直在努力,直到找到问题为止。

ExportAsFixedFormat似乎不喜欢包含公式的Excel工作表。要解决此问题,我只创建了一个新的空白工作表,并将我的主工作表中的内容复制并粘贴(仅限值)到其中。这似乎完美无缺。然后我在我的代码中自动执行此操作,如下所示:

    Dim xlworksheet_static As Excel.Worksheet = xlWorkBook.Worksheets(2)
    xlWorkSheet.Range("A1", "H35").Copy()
    xlworksheet_static.Activate()
    xlworksheet_static.Range("A1", "H35").Select()
    xlworksheet_static.PasteSpecial(Excel.XlPasteType.xlPasteValuesAndNumberFormats)

    xlworksheet_static.ExportAsFixedFormat(Type:=Excel.XlFixedFormatType.xlTypePDF, Filename:=
     "d:\test\test.pdf", Quality:=Excel.XlFixedFormatQuality.xlQualityStandard _
    , IncludeDocProperties:=True, IgnorePrintAreas:=True, OpenAfterPublish:=
    False)

可能不是最直接的方式,但我无法让它工作!