vb.net - excel - проблема с задачей Windows

Я создал приложение .net, которое сохраняет данные в Excel. Когда я запускаю приложение вручную, программа сохраняет данные из таблицы данных в Excel. Проблема в том, что когда я планирую выполнение задачи на своем ПК с Windows 10, я получаю следующую ошибку.

:System.Runtime.InteropServices.COMException (0x800A03EC): исключение из HRESULT: 0x800A03EC в Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs(имя файла объекта, формат файла объекта, пароль объекта, пароль WriteResPassword объекта, рекомендуется только для чтения объекта, CreateBackup объекта, XlSaveAsAccessMode AccessMode , Object ConflictResolution, Object AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local)

 Public Shared Function CreateExcel() As Microsoft.Office.Interop.Excel.ApplicationClass
    For retry As Integer = 1 To 5
        Try
            clsScrape.SendMail(" Return New Microsoft.Office.Interop.Excel.ApplicationClass")
            Return New Microsoft.Office.Interop.Excel.ApplicationClass

            Exit For
        Catch ex As Exception
            If ex.HResult <> &H80080005 Then Throw ex
        End Try
    Next

    Return Nothing
End Function

Public Shared Sub ExportExceltest(ByVal excel As Microsoft.Office.Interop.Excel.ApplicationClass)

    Try

        Dim dt As New DataTable
        dt.Columns.Add("ID")
        dt.Columns.Add("Name")


        Dim R As DataRow = dt.NewRow
        R("Name") = "MY Name"
        dt.Rows.Add(R)

        Dim strFile As String = "C:\Users\CodeMonger\Documents\Development\Test" & DateTime.Now.ToString("yyyy_MM_dd HH_mm_ss") & ".xlsx"
        '  Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
        Dim wBook As Microsoft.Office.Interop.Excel.Workbook
        Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet

        wBook = excel.Workbooks.Add()
        wSheet = wBook.ActiveSheet()

        Dim dc As System.Data.DataColumn
        Dim dr As System.Data.DataRow
        Dim colIndex As Integer = 0
        Dim rowIndex As Integer = 0

        For Each dc In dt.Columns
            colIndex = colIndex + 1
            excel.Cells(1, colIndex) = dc.ColumnName
        Next

        For Each dr In dt.Rows

            rowIndex = rowIndex + 1
            colIndex = 0
            For Each dc In dt.Columns
                colIndex = colIndex + 1
                excel.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
            Next




        Next

        clsScrape.SendMail("The datatable was built and this is Right before save")

        wSheet.Columns.AutoFit()
        wBook.SaveAs(strFile)
        wBook.Close()

    Catch ex As Exception
        clsScrape.SendMail("Here is the Issue     :" & ex.ToString)
    End Try


End Sub

person CodeMonger    schedule 08.01.2017    source источник


Ответы (1)


Переместите код построения вашего объекта Excel в фабричную подпрограмму, которая будет выполнять повторную попытку при обнаружении исключения, например

Function CreateExcel() as Microsoft.Office.Interop.Excel.ApplicationClass
    For retry As Integer = 1 To 5
        Try
            Return New Microsoft.Office.Interop.Excel.ApplicationClass
            Exit For
        Catch ex As Exception
            If ex.HResult <> &H80080005 Then Throw ex
        End Try
    Next

    Return Nothing
End Function

В этой статье подробно проблемы, которые будут CO_E_SERVER_EXEC_FAILURE:

Эта проблема может возникнуть для внепроцессного COM-сервера, когда

  1. Машина имеет высокую загрузку ЦП, и процесс запуска и выполнения CoRegisterClassObjects() занимает много времени менее чем за 120 секунд.

  2. COM-сервер не регистрирует правильные идентификаторы классов.

  3. COM-сервер в настоящее время останавливается, и существует состояние гонки между CoCreateInstance и останавливающей частью COM-сервера.

  4. Существует проблема безопасности в способе запуска COM-сервера (эта страница, кажется, предлагает пароли с ошибками или отсутствие привилегии «Войти в качестве пакетного задания» для «Запуск от имени» COM-серверов, но в любом случае я бы предложил еще раз проверить это информация для вашей конкретной конфигурации)

person RamblinRose    schedule 08.01.2017
comment
Итак, я попробовал ваше предложение, и это, похоже, решило проблему. - person CodeMonger; 09.01.2017
comment
Я изменил приведенный выше код, чтобы включить ваш ответ о том, как я использую конструктор и создаю Excel. - person CodeMonger; 09.01.2017
comment
@CodeMonger, продвигаясь вперед, подумайте о том, чтобы принять ответ и задать новый, поскольку исходный вопрос / ответ мог помочь кому-то в будущем. Ваша новая проблема может быть дубликатом этого вопроса . Дважды проверьте путь к файлу, убедитесь, что ваша программа может читать/записывать путь и т. д. - person RamblinRose; 09.01.2017