Daten aus Excel importieren

  • VB.NET

Es gibt 81 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Daten aus Excel importieren

    hallöchen :)

    ich möchte daten aus einem excel in eine checkboxlist importieren.

    es gibt hier natürlich einige threads zum excel import, meist werden aber nur fertige codes gepostet usw.
    ich möchte aber genau wissen wie das funktioniert bzw weshalb welche befehle verwendet werden und was die tun.

    das hier hab ich zb gefunden (was bei mir aber irgendwie nicht funktioniert)

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Try
    3. Dim MyConnection As OleDbConnection
    4. Dim MyCommand As OleDbDataAdapter
    5. MyConnection = New OleDbConnection _
    6. ("provider=Microsoft.Jet.OLEDB.4.0;Data Source='E:\Test.xls';Extended Properties=Excel 8.0;")
    7. MyCommand = New OleDbDataAdapter _
    8. ("select * from [Tabelle1$]", MyConnection)
    9. MyCommand.TableMappings.Add("Table", "TestTable")
    10. DtSet = New DataSet
    11. MyCommand.Fill(DtSet)
    12. DataGridView1.DataSource = DtSet.Tables(0)
    13. MyConnection.Close()
    14. Catch ex As Exception
    15. MsgBox(ex.ToString)
    16. End Try
    17. End Sub


    hätte vielleicht jemand bitte ein paar erklärende worte dazu?

    danke
    Was genau funktioniert denn nicht? Wie macht sich das "nicht funktionieren" bemerkbar (abgesehen davon, dass der Code keine CheckedListBox, sondern ne DataGridView befüllt).


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

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

    es tut sich nix bzw eine fehlermeldung kommt; die externe tabelle hat nicht das erwartete format...

    ja ich weiß, probiers noch mit einem dgv.

    eine meldung kam davor bei:
    DtSet = New DataSet

    habs geändert in
    Dim DtSet As New DataSet
    falsch?
    habs nun hinbekommen mithilfe von google.

    VB.NET-Quellcode

    1. Private Sub Load_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Load.Click
    2. Dim sFilePath, sFileName As String
    3. Dim sSlash As Single
    4. Dim OpenFileDialog1 As New OpenFileDialog
    5. With OpenFileDialog1
    6. .Title = "Import"
    7. .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
    8. .Filter = "Excel (*.xls)|*.xls"
    9. .ShowDialog(Me)
    10. sFilePath = Mid(.FileName, 1, sSlash)
    11. sFileName = Mid(.FileName, sSlash + 1, Len(.FileName))
    12. End With
    13. Dim strConnection As System.Data.OleDb.OleDbConnection = Nothing
    14. Dim myPath As String = sFilePath & sFileName
    15. Try
    16. Dim objDataSet As System.Data.DataSet
    17. Dim objAdapter As System.Data.OleDb.OleDbDataAdapter
    18. strConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source='" & myPath & " '; " & "Extended Properties=Excel 8.0;")
    19. objAdapter = New System.Data.OleDb.OleDbDataAdapter("select * from [Tabelle1$]", strConnection)
    20. objDataSet = New System.Data.DataSet
    21. objAdapter.Fill(objDataSet)
    22. DataGridView1.DataSource = objDataSet.Tables(0).DefaultView
    23. strConnection.Close()
    24. Catch ex As Exception
    25. MessageBox.Show(ex.Message)
    26. strConnection.Close()
    27. End Try
    28. End Sub


    könnte mit bitte jemand folgendes erläutern? :(
    .ShowDialog(Me)
    sFilePath = Mid(.FileName, 1, sSlash)
    sFileName = Mid(.FileName, sSlash + 1, Len(.FileName))

    und warum braucht es nach aufrufen des openfiledialoges kein If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then... ?
    Statt den OpenFileDialog zu deklarieren, kannst du besser die Using-Anweisung verwenden. .ShowDialog(Me) ist nicht so gut.
    Frag lieber ab, ob das DialogResult "OK" ist.

    VB.NET-Quellcode

    1. If OpenFileDialog1.ShowDialog() = DialogResult.OK


    VB.NET-Quellcode

    1. My.Computer.FileSystem.SpecialDirectories.Desktop


    wird zu:

    VB.NET-Quellcode

    1. Environment.GetFolderPath(Environment.SpecialFolder.Desktop)


    BTW: Mid ist eine alte VB6-Funktion, die nicht .NET-konform ist.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    danke für eure hilfe :*

    eine allg frage zu hier angewandten mid-funktion:

    sFilePath = Mid(.FileName, 1, sSlash)

    sFileName = Mid(.FileName, sSlash + 1, Len(.FileName))

    ich versteht das mit diesem sSlash als Single nicht :(

    die mid funktion kenn ich sonst schon
    Mid (string, start, [length] )
    Was verstehst du daran nicht?
    BTW: Löse bitte Mid mit String.Substring ab.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Soweit, wie die Angabe von sSlash ist. Da die vermutlich nicht angegeben ist, musst du sie selbst initialisieren. Was ich daran nicht verstehe, warum willst du das überhaupt machen? Lies dann doch gleich den ganzen Pfad in die Variable ein.

    Zudem:

    Trade schrieb:

    BTW: Löse wenn bitte Mid mit String.Substring ab.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    eben, sSlash war nur als Single definiert, mehr nicht. also bei mir.

    (hab den code ja wo rauskopiert weil ichs selbst nicht schaffte)

    aber hast recht, habs nun komplett geändert und lese gleich den .filename ein und spar mit das ganze zwischendrin da es für mich keine bedeutung hat.

    danke dir! :love:


    VB.NET-Quellcode

    1. Private Sub Load_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Load.Click
    2. Dim OpenFileDialog1 As New OpenFileDialog
    3. OpenFileDialog1.Title = "Import"
    4. OpenFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    5. OpenFileDialog1.Filter = "Excel (*.xls)|*.xls"
    6. If OpenFileDialog1.ShowDialog = DialogResult.OK Then
    7. Dim strConnection As System.Data.OleDb.OleDbConnection = Nothing
    8. Try
    9. Dim objDataSet As DataSet
    10. Dim objAdapter As OleDb.OleDbDataAdapter
    11. strConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source='" & OpenFileDialog1.FileName & " '; " & "Extended Properties=Excel 8.0;")
    12. objAdapter = New OleDb.OleDbDataAdapter("select * from [Tabelle1$]", strConnection)
    13. objDataSet = New DataSet
    14. objAdapter.Fill(objDataSet)
    15. DataGridView1.DataSource = objDataSet.Tables(0).DefaultView
    16. strConnection.Close()
    17. Catch ex As Exception
    18. MessageBox.Show(ex.Message)
    19. strConnection.Close()
    20. End Try
    21. End If
    22. End Sub


    wenn man die daten so einliest hat man ja nicht die möglichkeit das tabellenblatt oder vielleicht spalten/zeilen auszuwählen.
    gibts da eine möglichkeit das zu machen?
    Ich habe leider keine Ahnung davon, da bin ich der falsche Ansprechpartner, aber es wäre wirklich noch gut, wenn du den OpenFileDialog in eine Using-Anweisung setzt, denn die implementiert die IDisposable-Schnittstelle, mit der das am Ende wieder freigegeben wird.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    mein problem an dem ich nun herumwerke ist folgendes;

    ich möchte eine zeile im dgv auswählen und diese in ein anderes dgv befördern.

    ich hab da ständig probleme, dass ich zuerst die spalten vor den reihen brauche...


    gibts da generell irgendein video oder eine anleitung?

    probiers schon seit stunden mit zig varianten aber kriegs nicht hin :(
    wie wärs mit einem typisierten Dataset? Da könntest du ein geeignetes Datenmodell dafür erstellen.

    Du würdest aber nicht eine DGV-Zeile in ein anneres kopieren, sondern einer Verweis-DataTable einen Verweis auf den gewählten Datensatz zufügen.
    Ein DGV wäre dann daran gebunden.
    hmmm, werd ich mir auf alle anschauen! danke.


    aber diese paar zeilen möchte ich auch nach diesen vielen stunden wo ich mir den kopf schon zerbrochen hab auf die reihe bringen können.

    meine grundlegenden gedanken (die in ich dann in einen code umformen muss) sind:

    ich markiere ein paar nebeneinanderliegende zellen ->die sollen ins andere dgv.

    VB.NET-Quellcode

    1. Dim newcolumn As New DataGridViewColumn
    2. Dim newcell As New DataGridViewTextBoxCell
    3. 'ich will also die spalten erzeugen und darunter/darin die zelle mit dem ausgewählten text
    4. 'jetzt brauch was in der art;
    5. 'wenn eine zelle markiert wird, dann füge eine spalte im anderen dgv hinzu sowie eine zelle/reihe inkl. text


    lieg ich hier mit meinen grundgedanken schon falsch?
    bin mir nicht so sicher weil ich öfter die fehlermeldung bekam dass eine spalte zuerst vorhanden sein muss...

    BöseSusi schrieb:

    ich markiere ein paar nebeneinanderliegende zellen ->die sollen ins andere dgv.
    ...
    lieg ich hier mit meinen grundgedanken schon falsch?
    naja - du denkst nicht über Daten-Verarbeitung nach, sondern über DatagridViewZellen-Verarbeitung.

    Was soll das bedeuten, wenn aus dem einen Grid Zellen ins annere fliegen?

    also was bedeutet das eine Grid, und was bedeutet das annere? Was für Daten sind da angezeigt? User? Bestellungen? Messwerte?
    ich will folgendes umsetzen:


    ich hab eine excel tabelle in der sämtliche bauteileigenschaften aufgelistet sind.

    nun möchte ich ein neues bauteil definieren in meiner bauteildatenbank.

    somit möchte ich aus der gesamten liste die eigenschaften rausnehmen, welche für mein neues bauteil relevant sind.

    daher will/wollte ich die excel tabelle laden, und im zweiten schritt die relevanten eigenschaften auswählen und eben in einem anderen dgv aufgelistet haben.
    diese eigenschaften möchte ich danach vielleicht auch noch bewerten...

    (bin schülerin einer technischen schule :) )
    Willst du bei der Excel-Tabelle bleiben? Dann wäre vlt. Excel-VBA günstiger für dich.

    ansonsten könntest du die Datenhaltung wie gesagt in einem typisierten Dataset organisieren, aber dazu müssteste erstmal relationale Datenmodellierung erlernen, und dann, wie man Controls daran bindet.

    Also willst du für deine Anwendung ein relationales Datenmodell im typisierten Dataset anlegen?
    die relationale GrundIdee
    vier Views-Videos

    falls ja, poste Screenshot von deim typisierten Dataset im Dataset-Designer.

    Falls nein, trotzdem frohe Weihnachten!
    zuerst mal danke für deine antworten.

    die vier views bzw die relationale datenmodellierung konnte ich schon bei einem teil meines projektes umsetzen.


    meine bauteileigenschaften sind fix in excel tabellen vorgegeben.
    ich muss halt auf welchem weg auch immer aus dem excel bestimmte davon rauspicken... die bauteile werden dann modulen zugewiesen usw. (stückliste), was ich alles im vb mache.

    es geht bei dem jetzigen schritt echt nur darum ein paar ausgewählte zellen aus einer großen tabelle als text da stehen zu haben, mehr nicht.
    da gibts gar keine verknpfüngen oder sonst was, es soll frei entscheidbar irgendwas dem bauteil zugewiesen werden können. hätte da ein dataset überhaupt sinn? wenn doch, und dies die beste lösung ist, dann werde ich es natürlich versuchen so zu machen...

    danke, ebefalls frohe weihnachten! :)