DataGridView aus Excel-Datei befüllen

  • VB.NET

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

    DataGridView aus Excel-Datei befüllen

    Hallo,

    ich würde gerne ein DataGridView ohne eine Datenbankverbindung / Datenquelle mit einem Excel-File befüllen. Es ist definitiv nicht von mir erwünscht eine Datenbankverbindung aufzubauen. Ich schaffe es aktuell die Liste zu befüllen und zu exportieren, jedoch tu ich mich bei dem Import ein bisschen schwer. Könnte mir da jemand helfen? Am besten noch mit dem Button.Click eine Dateisuche öffnen, damit das Excel-File auswählbar ist und nicht fest gecodet.

    Dankeschön!

    Edit:
    Habe aktuell folgenden Code, scheint aber nicht ganz zu funktionieren...

    VB.NET-Quellcode

    1. Public Function importFromExcel()
    2. Dim path As String = "C:\Users\Philipp\Desktop\1.xlsx"
    3. Dim hdr As String = "No"
    4. Dim myDataset As New DataSet()
    5. Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=""Excel 8.0;HDR=" + hdr + ";IMEX=1"""
    6. Dim myData As New OleDb.OleDbDataAdapter("SELECT * FROM [Tabelle1$]", strConn)
    7. 'myData.TableMappings.Add("Table", "ExcelTest")
    8. myData.Fill(myDataset)
    9. DataGridView2.DataSource = myDataset.Tables(0).DefaultView
    10. End Function


    Exception:

    Quellcode

    1. Eine nicht behandelte Ausnahme des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
    2. Zusätzliche Informationen: Die externe Tabelle hat nicht das erwartete Format.

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

    Es gibt 3 Möglichkeiten:
    1. Man kann mit InterOp-Excel-VBA ein Excel-Workbook öffnen, und darin herumfuhrwerken.
      Habich nur wenig Ahnung von, und das hat elendige Probleme bei der Resourcenbereinigung, also unter gewissen Umständen schließt dir das eine Excel-Anwendung, die eiglich offen bleiben sollte, oder es failt, weil Excel bereits offen ist, oder es startet Excel als Prozess, und belässt es unaufgeräumt im Speicher, und lauter son Mist.
    2. Man kann mit einer OleDB-Connection das Excel-Workbook abfragen wie eine Datenbank.
      Ebenfalls voll nervig, weil Excel-Zellen können beliebige Datentypen beinhalten, aber der OleDB-Treiber versucht da iwie die richtigen Datentypen selbständig abzuschätzen, und meist failt er darin, für mehr oder weniger viele Datensätze.
    3. Du kannst das Worksheet als Csv exportieren, und man kann versuchen, ob man das vernünftig einlesen kann.
      Dassis umständlich, denn zunächst musste von Excel aus was exportieren, und dann musstes vom Proggi aus nochmal einlesen.

    Ja, und einlesen sollte man niemals in ein DataGridView, sondern immer in ein typisiertes Dataset. Daran kann man dann ein DGV binden, und dann kann man gescheit damit arbeiten.

    Ah - du hast ein bisserl SampleCode dran-editiert - Variante 2, und es zeigt sich, dass das Worksheet ühaupt nicht kompatibel ist. Probierma hdr="Yes".
    Ansonsten muss man halt das Sheet mal angugge - wie gesagt: In Excel kannman ja alles mögliche anstellen.

    Und du liest leider in ein untypisiertes Dataset ein, dassis zwar Quick&Dirty, aber wenn du die Daten weiterverarbeiten, oder in nur einigermaßen Optik präsentieren willst, wirst du damit nicht froh.
    Folgende Thematik...
    1. Ich schreibe Datensätze in das untypisierte DGV,
    2. Ich erstelle eine Excel-Datei aus den Daten im DGV,
    3. Ich möchte die exportierten Daten nach einem Neustart des Programms wieder in das DGV importieren.

    Der 3. Punkt kann leider noch nicht so ganz erfüllt werden.

    Ich würde gerne deinem dritten Weg folgen, aber das scheint mir nicht ganz einfach zu sein. Könntest du mir hier eine kleine Hilfestellung geben?

    VG
    nein, weil mit untypisierten Sachen gebe ich mich nicht ab.

    noch bisserl Hilfestellung zu Begriffen: Es gibt kein untypisietes DGV.

    Du scheinst ganz und gar zu übersehen, dass die Daten in einem Dataset liegen (typisiert: ok, untypisiert: Crap).
    Sie liegen nicht in einem DGV.
    Das DGV ist nur ans Dataset gebunden. Du schreibst nichts ins DGV, und du erstellst auch keine Excel-Datei aus Daten im DGV, denn die Daten sind im Dataset, nicht im DGV.

    Du kannst ohne Excel keine Excel-Datei erstellen (naja - manche Cracks können das, aber wir zweibeide können das nicht)

    Du kannst keine Daten in ein DGV importieren.