Excel-Prozess nicht schließen VB.net

Erstelle ich eine excel-Datei mit interop.excel und der Prozess schließt sich nicht.
Dies ist der code, den ich versuche zu verwenden.

 Private Sub converToExcel(fileLoc As String, ds As DataSet)
    Dim xlApp As Excel.Application
    Dim xlWorkBook As Excel.Workbook
    Dim xlWorkBooks As Excel.Workbooks
    Dim xlWorkSheet As Excel.Worksheet
    Dim misValue As Object = System.Reflection.Missing.Value
    Dim i As Integer
    Dim j As Integer

    xlApp = New Excel.Application
    xlWorkBooks = xlApp.Workbooks
    xlWorkBook = xlWorkBooks.Add(misValue)
    xlWorkSheet = xlWorkBook.Sheets("sheet1")

    For i = 0 To ds.Tables(0).Rows.Count - 1
        For j = 0 To ds.Tables(0).Columns.Count - 1
            xlWorkSheet.Columns.NumberFormat = "@"
            xlWorkSheet.Cells(i + 1, j + 1) = String.Format("{0}", ds.Tables(0).Rows(i).Item(j).ToString())
        Next
    Next

    xlWorkSheet.SaveAs(fileLoc)
    xlWorkBook.Close()
    xlApp.Quit()

    releaseObject(xlWorkSheet)
    releaseObject(xlWorkBook)
    releaseObject(xlWorkBooks)
    releaseObject(xlApp)

End Sub
Private Sub releaseObject(ByVal obj As Object)
    Try
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
        obj = Nothing
    Catch ex As Exception
        obj = Nothing
    Finally
        GC.Collect()
    End Try
End Sub

Ich glaube, ich bin fehlt ein COM-Objekt, kann aber nicht scheinen, um eine Lösung zu finden.
Auch als Hinweis, dieser unter der 64-bit-Windows-8.
Jede Hilfe würde groß sein!
Dank

  • Und Sie sind sicher, dass dies nicht eine Instanz, die Links von vorherigen Tests?
  • ja, ich check den Task-Manager nach jedem test und entfernen Sie alle Instanzen von excel.
  • Ich glaube nicht, dass dies die Ursache für dein problem, aber releaseObject können nicht alles tun, Sie denken, es tut. Da bist du vorbei obj ByVal, die obj = Nothing nicht haben keine Auswirkung auf die xlWorkSheet, xlWorkBook etc. Variablen.
  • Geändert releaseObject zu byref statt byval gleiche Ergebnis.
  • Wirkt sich das hinzufügen xlWorkbooks.Schließen entfernen Sie den Prozess? Wenn nicht, würde ich empfehlen, den code schrittweise Durchlaufen, zu sehen, wenn Prozesse geschaffen werden, und dann bestimmen, was entfernt in Richtung auf das Ende deiner Sub.
  • ...und ist die Letzte Excel-Datei generiert wird? Gibt es eine Möglichkeit, dass dein Sub ist erroring und trat um sich, bevor er sich löst Referenzen? Ich steckte Sie Ihren code in einen editor, und das Tat es, wenn ich lieferte ein dataset mit keine Tabellen. Wenn ich die Versorgung ein Datensatz mit mindestens einer Tabelle, dann ist dein code lief fein und veröffentlicht alle Referenzen.
  • Der sub ist nicht erroring vor dem release, wenn ich einen Schritt durch Sie alles ordnungsgemäß ausgeführt wird. Auch die sub-Aufruf in der Fehlerbehandlung, so würde es kick-out zu. Die einzige andere Sache, die ich denken kann, ist, dass es unter Windows 8 läuft.
  • Ich weiß, das ist eine dumme Frage, aber Ihre Berufung Sub nicht festlegen Verweise auf Excel, richtig?
  • Die einzige andere Zeit, die in der Anwendung ich mich auf excel zugegriffen wird, die über eine oleDB-Verbindung nicht interop. Ich Tat, werfen Sie den original-code in einer Konsole app in VS läuft auf windows 7 und es funktioniert einwandfrei. Auf windows 8 der Prozess bleibt offen.
  • Sie schließen, sobald die Anwendung beendet wird?

InformationsquelleAutor jmcsmith | 2013-01-08
Schreibe einen Kommentar