Excel einlesen in Dt, Problem mit Format

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Excel einlesen in Dt, Problem mit Format

    Hallo zusammen,

    ich brauche Daten aus einer Exceldatei(.xlsx) diese wird erledigt durch

    VB.NET-Quellcode

    1. Dim dt As New DataTable("Temp")
    2. Dim oConn As System.Data.OleDb.OleDbConnection
    3. Dim oAdapter As System.Data.OleDb.OleDbDataAdapter
    4. Dim sFile As String = path
    5. Dim sTable As String = table
    6. Dim sConn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sFile & ";Extended Properties=Excel 12.0;"
    7. oConn = New System.Data.OleDb.OleDbConnection(sConn)
    8. oAdapter = New System.Data.OleDb.OleDbDataAdapter(
    9. "SELECT * FROM [" & sTable & "$]", oConn)
    10. Try
    11. oAdapter.Fill(dt)
    12. Catch ex As Exception
    13. MsgBox(ex.Message)
    14. Exit Sub
    15. Finally
    16. oConn.Close()
    17. End Try


    Im Excel stehen Zahlen, ich bekomme aber im Dt nur Datetime formate. wenn ich eine Kopie der Excel mache und vorher alles auf Zahl formatiere geht es. Da ich aber an die Excel so nichts machen kann suche ich ein weg die Excel zu öffnen und zu formatieren und letztlich das select mache und die Excel ohne speichern zu schließen.

    vllt. hat wer eine Lösung für. Lg
    Hi,
    ich hatte letztens eine ähnlich Anforderung.
    Hier meine ExcelImport Extension in C#:

    C#-Quellcode

    1. using Excel = Microsoft.Office.Interop.Excel;
    2. public static void ExcelImport(this DataTable dt, String path, DataTable child)
    3. {
    4. Excel.Application xl = new Excel.Application();
    5. Excel.Workbook wkb = xl.Workbooks.Open(path, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
    6. Excel.Worksheet wks = (Excel.Worksheet)wkb.Sheets[1];
    7. int rowIndex = 10;
    8. DataRow row;
    9. int sellerID = 0;
    10. if (((Excel.Range)wks.Cells[7, 2]).Value2 != null)
    11. {
    12. row = dt.NewRow();
    13. row[1] = Convert.ToInt32(((Excel.Range)wks.Cells[7, 2]).Value2);
    14. row[2] = Convert.ToString(((Excel.Range)wks.Cells[3, 2]).Value2);
    15. dt.Rows.Add(row);
    16. sellerID = (int)row[0];
    17. row = null;
    18. while (((Excel.Range)wks.Cells[rowIndex, 1]).Value2 != null)
    19. {
    20. if (((Excel.Range)wks.Cells[rowIndex, 2]).Value2 == null)
    21. {
    22. rowIndex++;
    23. continue;
    24. }
    25. row = child.NewRow();
    26. row[6] = sellerID;
    27. row[1] = Convert.ToInt32(((Excel.Range)wks.Cells[rowIndex, 1]).Value2);
    28. row[2] = Convert.ToString(((Excel.Range)wks.Cells[rowIndex, 2]).Value2);
    29. row[3] = Convert.ToString(((Excel.Range)wks.Cells[rowIndex, 3]).Value2);
    30. row[4] = Convert.ToDecimal(((Excel.Range)wks.Cells[rowIndex, 4]).Value2);
    31. child.Rows.Add(row);
    32. rowIndex++;
    33. }
    34. }
    35. xl.Workbooks.Close();
    36. }
    "Hier könnte Ihre Werbung stehen..."
    Ich hatte das Problem auch, das trotz Excelvorlage manchmal die Zellen falsch formatiert waren, das anstatt eine Zahl eine Zahl als Text hinterlegt war. (A1 = '12 anstatt A1 = 12)
    Deswegen Convertiere ich die einzulesende Zelle immer in das Format, das meine DT benötigt.
    "Hier könnte Ihre Werbung stehen..."