Excel in DataSet einlesen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Schamash.

    Excel in DataSet einlesen

    Hallo zusammen,

    ich habe diesen Programmcode:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Holt die Daten aller Arbeitsmappen aus einer Excel-Datei in ein DataSet
    3. ''' </summary>
    4. ''' <param name="DateiName">Pfad zur Excel-Datei</param>
    5. ''' <param name="Kopfzeile">Haben die Tabellenspalten Überschriften</param>
    6. ''' <returns>DataSet</returns>
    7. Public Function GetExcelToDataSet(ByVal DateiName As String, Optional ByVal Kopfzeile As Boolean = False) As DataSet
    8. GetExcelToDataSet = New DataSet()
    9. Dim Provider As String = "Microsoft.ACE.OLEDB.12.0"
    10. Dim ExProp As String = "Excel 12.0 Xml"
    11. Dim con As New OleDbConnection(String.Format("Data Source={0};Provider={1};Extended Properties=""{2};HDR={3}""", DateiName, Provider, ExProp, If(Kopfzeile, "Yes", "No")))
    12. If con.State = ConnectionState.Closed Then con.Open()
    13. Dim sheets As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
    14. For Each sheet As DataRow In sheets.Rows
    15. Dim tableName As String = sheet("Table_Name").ToString()
    16. Dim com As New OleDbCommand(String.Format("SELECT * FROM [{0}]", tableName), con)
    17. Dim adap As New OleDbDataAdapter(com)
    18. '------------ Von Hier
    19. Dim dt As New DataTable
    20. adap.Fill(dt)
    21. Dim Name As String = dt.Rows(2).Item(0).ToString
    22. If Not String.IsNullOrEmpty(Name) AndAlso Name.Substring(0, 5) = "YC0P3" Then adap.Fill(GetExcelToDataSet, tableName)
    23. '------------ Bis Hier
    24. Next
    25. con.Close()
    26. End Function

    Nun würde ich gerne den Markierten bereich "schöner" bauen.
    Der Code tut was er soll, es werden alle Tabellenblätter die in Zelle "A3" mit den Text "YC0P3" beginnen als Tabellen in das DataSet geladen.
    Ich mag den "Umweg" über die Tabelle aber nicht.
    Ich hatte versucht den SELECT-String mit "WHERE A3 LIKE 'YC0P3%'" zu erweitern, da schlägt das .fill aber fehl. -> "Mindestens ein Parameter ist nicht gesetzt"

    Fällt jemandem eine elegantere Lösung ein?
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    Schamash schrieb:

    Dim com As New OleDbCommand(String.Format("SELECT * FROM [{0}]", tableName), con)
    Ich habe keine Ahnung, ob das bei dir zutrifft.
    Wenn du an tableName einen $ anhängst, wird das Sheet an sich genommen.
    Wenn der $ fehlt, wird halbintelligent versucht in dem Sheet eine tabellenartige Struktur mit Header zu finden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod Ah, das wusste ich noch nicht. Also das $ für sheet hängt dran.
    Leider habe ich keine Header zum Testen aber da der "SELECT *** WHERE A3 ='Wert'" nicht funktioniert glaube ich das eine Spaltensuche auch nichts bringen würde.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."