2009-05-15 4 views
1

Hier ist der Fehler:kopieren von VB.Net App Excel verursacht einen 0x800A03EC Fehler in einigen Umgebungen

System.Runtime.InteropServices.COMException, Einfügen, Ausnahme von HRESULT: 0x800A03EC

Alle Maschinen sind Windows XP mit der gleichen Version von Excel (2003). Einige Computer erhalten den Fehler, andere nicht. Wir müssen noch ein Muster finden. Hier

ist der Code:

Public Shared Sub ExportToExcel(ByVal dt As System.Data.DataTable) 
     Dim app As New Microsoft.Office.Interop.Excel.Application 
     app.Visible = False 
     Dim Book = app.Workbooks.Add 
     Try 
      Dim Sheet = CType(Book.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet) 
      With Sheet 
       Dim c As Long = Asc("A") 
       For Each dc As DataColumn In dt.Columns 
        .Range(Chr(CInt(c)) & "1").Value = dc.ColumnName.ToString 
        .Range(Chr(CInt(c)) & "1").Font.Bold = True 
        c += 1 
       Next 

       Sheet.Activate() 
       Sheet.Range("A2:A2").Select() 
       Sheet.Paste() 
       .Columns.AutoFit() 
       CType(app.ActiveWorkbook.Sheets(2), Microsoft.Office.Interop.Excel.Worksheet).Delete() 
       CType(app.ActiveWorkbook.Sheets(2), Microsoft.Office.Interop.Excel.Worksheet).Delete() 
      End With 
      app.Visible = True 
      app.UserControl = True 
     Catch ex As Exception 
      ExceptionManager.HandledException(ex, "Unable to Copy to Excel.", "You are SOL", , False) 
     Finally 
      Book = Nothing 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(app) 
      app = Nothing 
      GC.Collect() 
      GC.WaitForPendingFinalizers() 
     End Try 

    End Sub 

Antwort

1

COM Referenz gezählt ist. Das System hält einen Zähler jedes Mal, wenn Ihr Dinge verwenden, so sollten Sie diese Hinweise, bevor Sie Ausfahrt wie so aufzuräumen:

Marshal.ReleaseComObject(myVaraible); 

Sie wahrscheinlich nicht brauchen die WaitForPendingFinalizers, und auch die GC.Collect ist ein teurer Aufruf, der nicht benötigt werden sollte, wenn Sie jedes com-Objekt freigeben, indem Sie den obigen Code verwenden, um die Referenzzahl zu verringern.

Auch ich bin mir nicht sicher, ob Sie die primären Interop-Assemblies verwenden, aber Sie müssen sicherstellen, dass Sie die richtige Version für die Version von Excel verwenden, auf die Sie ausgerichtet sind, oder Sie können Fehler wie den aufgetretenen erhalten.

Verwandte Themen