Ошибка System.Runtime.InteropServices.COMException: код создает несколько PDF-файлов с ExportAsFixedFormat, но затем выдает ошибки - PullRequest
0 голосов
/ 07 мая 2020
Программа

My VB. Net в Visual Studio создает файлы Excel, а затем сохраняет их как PDF, но после стольких (30, 40 или что-то еще, не в точку) выдает ошибку: «Ошибка System.Runtime.InteropServices.COMException : 'Исключение из HRESULT: 0x800A03E C' ". Наверное, я думаю, что это способ закрытия / выпуска Excel?
Ошибка связана с этой строкой кода после того, как я открываю документ Excel и пытаюсь сохранить его как PDF. Опять же, это всегда происходит после того, как некоторые документы уже были сохранены в формате PDF (иногда 30, иногда 50 ...):

xwb.ActiveSheet.ExportAsFixedFormat(0, "\\ken-resourcesan\fileshares\fieldshare\IT\nsantagata\ARStatements_CustomerInvoicesPDF\" & originalCustomerName & " " & customerNumber & " " & todaysDate & ".pdf")

Вот весь код, который у меня есть:

ЭТО СОЗДАЕТ ДОКУМЕНТ EXCEL И ЗАПОЛНЯЕТ ЕГО ДАННЫМИ:

Public Sub PopulateSheet(ByVal dt As Data.DataTable, ByVal File As String)
        Dim oXL As Excel.Application = CType(CreateObject("Excel.Application"), Excel.Application)
        Dim oWB As Excel.Workbook
        Dim oSheet As Excel.Worksheet
        Dim oRng As Excel.Range
        oWB = oXL.Workbooks.Add
        oSheet = CType(oWB.ActiveSheet, Excel.Worksheet)

'****Spreadsheet gets populated
......

'****Then
oWB.SaveAs(File)

oRng = Nothing
oXL.Quit()

GC.Collect()
GC.WaitForPendingFinalizers()

Marshal.FinalReleaseComObject(oXL)
Marshal.FinalReleaseComObject(oSheet)
Marshal.FinalReleaseComObject(oWB)

oSheet = Nothing
oWB = Nothing
oXL = Nothing

НАКОНЕЦ СОХРАНЯЕТ ДОКУМЕНТ В формате PDF:

Dim xl As Object
Dim xwb As Object
xl = CreateObject("Excel.Application")

dt = CreateTable()

PopulateSheet(dt, "\\ken-resourcesan\fileshares\fieldshare\IT\nsantagata\ARStatements_CustomerInvoicesExcel\" & originalCustomerName & " " & customerNumber & " " & todaysDate & ".xlsx")

'****Open xlsx doc to save as pdf
xwb = xl.Workbooks.Open("\\ken-resourcesan\fileshares\fieldshare\IT\nsantagata\ARStatements_CustomerInvoicesExcel\" & originalCustomerName & " " & customerNumber & " " & todaysDate & ".xlsx")

xwb.ActiveSheet.PageSetup.Zoom = False
xwb.ActiveSheet.PageSetup.FitToPagesWide = 1
xwb.ActiveSheet.PageSetup.FitToPagesTall = False

'****Save as pdf
xwb.ActiveSheet.ExportAsFixedFormat(0, "\\ken-resourcesan\fileshares\fieldshare\IT\nsantagata\ARStatements_CustomerInvoicesPDF\" & originalCustomerName & " " & customerNumber & " " & todaysDate & ".pdf")

xl.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xl)
xl = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(xwb)
xwb = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()

Любая помощь очень оценен. Спасибо

******** Комментарий: ** Я считаю, что существует проблема с тем, как Excel освобождается / закрывается в конце двух процессов Excel. Я думал, потому что программа работает нормально и сохраняет файлы Excel в формате PDF, но каждый раз она никогда не создает все файлы. Он останавливается после создания ряда PDF-файлов на строке, где находится «ExportAsFixedFormat». Он никогда не останавливается на одном и том же файле c, поэтому я бы сказал, что проблем с любым c PDF.

нет.

1 Ответ

0 голосов
/ 11 мая 2020

Я в основном изменил "ExportAsFixedFormat" на "Printout", и теперь, похоже, он работает нормально. Спасибо всем за вашу помощь!

ЭТО КОД, КОТОРЫЙ У МЕНЯ ТЕПЕРЬ:

Dim Path As String = "\\ken-resourcesan\fileshares\fieldshare\IT\nsantagata\ARStatements_CustomerInvoicesExcel\" & originalCustomerName & " " & customerNumber & " 050720.xlsx"
                Dim Excel As Excel.Application = New Excel.Application
                Dim WorkBook As Excel.Workbook = Excel.Workbooks.Open(Path)
                Dim WorkSheets As Excel.Sheets = WorkBook.Sheets
                Dim WorkSheet As Excel.Worksheet = CType(WorkSheets(1), Microsoft.Office.Interop.Excel.Worksheet)
                Excel.DisplayAlerts = False
                Excel.Visible = False
                'SAVE AS PDF
                Dim totalFileName As String = "\\ken-resourcesan\fileshares\fieldshare\IT\nsantagata\ARStatements_CustomerInvoicesPDF\" & originalCustomerName & " " & customerNumber & " " & todaysDate & ".pdf"
                Excel.ActiveSheet.Printout(Copies:=1, Preview:=False, ActivePrinter:="Microsoft Print to PDF", PrintToFile:=True, Collate:=True, PrToFileName:=totalFileName, IgnorePrintAreas:=False)
...