Announcement

Collapse
No announcement yet.

Fehler beim Einlesen von Excel Daten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler beim Einlesen von Excel Daten

    Hallo Zusammen,

    Ich bin noch verhältnismäßig neu beim Programmieren von VB . NET

    Wenn ich Daten aus Excel (2007, SP2 auf Windows XP SP3) mit Visual Basic .Net (9.0 SP1) einlesen möchte bekomme ich ständig folgende Fehlermeldung:

    System.Runtime.InteropServices.COMException was unhandled ErrorCode=-2147319784 Message="Altes Format oder ungültige Typbibliothek. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))" Source="Microsoft.Office.Interop.Excel"


    Dabei füge ich "Excel Microsoft 12.0 Object Library" in mein Projekt ein. Den Quellcode habe ich unten angefügt. Ich habe schon ettliches probiert, doch irgendwas mache ich wohl noch falsch. Meine Vorgehensweise: Erstelle ne simple Arbeitsmappe in Excel mit ein paar zahlen (startend oben links). Speichere diese unter c:\ als "test.xlsx" Erstelle ein Project und füge die Excel Microsoft 12.0 Object Library ein. Schiebe nen Button in mein form1 und schreibe folgenden Code (s.u.).

    Die Fehlermeldung verfolgt mich auch auf andere Computer (Windows XP SP3) und das ist ne Liste von Sachen die ich schon probiert habe:

    - Verschiedene (ältere) Office Bibliotheken referenziert
    - Foren nach diesem Problem durchsucht
    - Spracheinstellungen geändert
    - Updates überprüft und installiert
    - Diagnosetool in Excel ausführen lassen
    - Visual Basic neu installiert

    Nun ja, ich bin mittlerweile ziehmlich ratlos und würde mich über jeden Rat oder Hilfe sehr sehr freuen!

    Schöne Grüße
    Micha

    Code:
    Imports excel = Microsoft.Office.Interop.Excel
    
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim xlsApp As excel.Application
            Dim objectExcel As New excel.Application
            Dim objectWrkBk As excel.Workbook
            Dim objectSht As excel.Worksheet
            Dim range As excel.Range
            Dim rowCnt As Integer
            Dim colCnt As Integer
            Dim Objt As Object
    
            xlsApp = New excel.ApplicationClass
            objectWrkBk = objectExcel.Workbooks.Open("C:\test.xlsx")
            objectSht = objectWrkBk.Worksheets("Sheet1")
            range = objectSht.UsedRange
    
            For rowCnt = 1 To range.Rows.Count
                For colCnt = 1 To range.Columns.Count
                    Objt = CType(range.Cells(rowCnt, colCnt), excel.Range)
                    MsgBox(Objt.value)
                Next
            Next
    
            objectWrkBk.Close()
            xlsApp.Quit()
    
            releaseObject(xlsApp)
            releaseObject(objectWrkBk)
            releaseObject(objectSht)
    
        End Sub
    
        Private Sub releaseObject(ByVal objt As Object)
            Try
                System.Runtime.InteropServices.Marshal.ReleaseComObject(objt)
                objt = Nothing
            Catch ex As Exception
                objt = Nothing
            Finally
                GC.Collect()
            End Try
        End Sub
    
    End Class

  • #2
    LÖSUNG: Fehler beim Einlesen von Excel Daten

    Hallo an Alle,

    Ne Lösung hat sich gefunden und das Problem liegt daran, dass einige Spracheinstellungen auf diesem und andere Computer vermischt sind. Folgender Code kann das berücksichtigen:

    Code:
    Dim oldCI As System.Globalization.CultureInfo = _
        System.Threading.Thread.CurrentThread.CurrentCulture
            System.Threading.Thread.CurrentThread.CurrentCulture = _
                New System.Globalization.CultureInfo("en-US")
    Schöne Grüße
    Micha

    Comment


    • #3
      Ok, super - ansonsten hätte ich etwas Code gepostet, wie du mit Hilfe von "SQL"-Befehlen deine Excel-Sheets auslesen kannst.

      Davon abgesehen: Versuche IMMER das Prinzip von TRY/CATCH-Anweisungen zu benutzen. Damit hast du deutlich größere Chancen, die Ursache von Problemen zu finden, da die Exceptions meist nützliche Randinformationen preis geben.

      Comment


      • #4
        An TheoFontane :
        Wäre nett wenn Du die SQL-Lösung hier dennoch reinstellen würdest

        Danke

        Comment


        • #5
          Hier ein simpler Code, der per SQL-Anweisung auf ein Excel-Sheet zugreift.
          [highlight=vb.net]
          Public strExcelPfad As String = ""
          Private pDataSetInstanz As New DataSet

          Sub NurEinSimplerZugriff()
          Dim objConn As OleDb.OleDbConnection = Nothing
          Try
          Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strExcelPfad & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
          objConn = New OleDb.OleDbConnection(strConn)
          Dim strSelect As String = "SELECT * FROM [" & txt_Sheetname.Text & "$]"
          Dim objCmdSelect As New OleDb.OleDbCommand(strSelect, objConn)
          Dim objAdapter As New OleDb.OleDbDataAdapter

          Dim strSheetName As String = txt_Sheetname.Text.Trim

          If strSheetName.Equals(String.Empty) Then
          MsgBox("Sie müssen einen gültigen Tabellennamen eingeben.", MsgBoxStyle.Exclamation, "Tabellenname nicht gefüllt")
          Exit Sub
          End If

          objConn.Open()
          objAdapter.SelectCommand = objCmdSelect
          objAdapter.Fill(pDataSetInstanz, txt_Sheetname.Text)
          Catch exOLE As ArgumentException
          MsgBox("Sie müssen einen gültigen Tabellennamen eingeben.", MsgBoxStyle.Exclamation, "Tabellenname nicht gültig")
          Catch exOLEDB As OleDb.OleDbException
          MsgBox("Eine Tabelle mit diesem Namen kann nicht geöffnet werden. Bitte überprüfen Sie die Schreibweise des Tabellennamens.", MsgBoxStyle.Exclamation, "Tabellenname nicht gültig")
          Catch ex As Exception

          Finally
          If Not IsNothing(objConn) Then objConn.Close()
          End Try
          End Sub
          [/highlight]

          Comment

          Working...
          X