Excel File in Datagrid einlesen. Problem mit gemischter Spalte Text/Zahlen

  • VB.NET

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

    Excel File in Datagrid einlesen. Problem mit gemischter Spalte Text/Zahlen

    Hallo,

    ich möchte eine Excel-Tabelle automatisiert öffnen und verarbeiten. Das funktioniert auch bereits. Allerdings wird komischerweise eine Spalte falsch "erkannt" und wenn dort ein Textwert drin steht, dann ist dieser einfach nicht da. Anscheinend wird hier von VB ein falscher Datentyp (Double) dieser Spalte erkannt. Wie kann ich VB dazu zwingen, da dort Text zu erwarten ist. Sobald das Dataset gefüllt ist, ist die Eigenschaft leider schreibgeschützt, Vorher ändern habe ich auch nicht hinbekommen. Hat jemand eine Idee?

    Wenn ich die Datei vorher herunterlade, mit Excel öffne und die Spalte als Text formatiere und wieder schließen, dann wird es übrigens korrekt erkannt. kann ich aber leider so nicht machen. Soll ja automatisch laufen.

    VB.NET-Quellcode

    1. Public Shared Function ImportExceltoDatatable(filepath As String) As DataTable
    2. ' string sqlquery= "Select * From [SheetName$] Where YourCondition";
    3. Dim dt As New DataTable
    4. Try
    5. Dim ds As New DataSet()
    6. Dim constring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filepath & ";Extended Properties=""Excel 12.0;HDR=YES"""
    7. Dim con As New OleDbConnection(constring & "")
    8. con.Open()
    9. Dim myTableName = con.GetSchema("Tables").Rows(0)("TABLE_NAME")
    10. Dim sqlquery As String = String.Format("SELECT * FROM [{0}]", myTableName) ' "Select * From " & myTableName
    11. Dim da As New OleDbDataAdapter(sqlquery, con)
    12. da.Fill(ds)
    13. MsgBox(ds.Tables(0).Columns(0).DataType.ToString) '
    14. dt = ds.Tables(0)
    15. Return dt
    16. Catch ex As Exception
    17. MsgBox(Err.Description, MsgBoxStyle.Critical)
    18. Return dt
    19. End Try
    20. End Function
    21. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    22. Dim client As New WebClient()
    23. ServicePointManager.Expect100Continue = True
    24. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
    25. client.DownloadFile("https://www.xxx.de/export.xlsx", Application.StartupPath & "\Export.xlsx")
    26. Dim dt As DataTable
    27. dt = ImportExceltoDatatable(Application.StartupPath & "\Export.xlsx")
    28. DataGridView1.DataSource = dt
    29. DataGridView1.Visible = True
    30. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Superuse“ ()

    Die Erste Zeile/Zelle nach den Headern gibt den Datentypen der Spalte vor. Check mal ob es einen Connectionstring gibt diesbezüglich.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen