In .xls eine Spalte mit bestimmten Inhalt suchen und die Spalte ausgeben???

  • VB.NET

Es gibt 44 Antworten in diesem Thema. Der letzte Beitrag () ist von carwashbuxtehude.

    In .xls eine Spalte mit bestimmten Inhalt suchen und die Spalte ausgeben???

    Hallo,
    kann mir jemand dabei helfen.

    Wie bekomme ich es hin, das ich von A1 bis A30 nach einem Bestimmten Datum suche das in der TextBox 1 steht.

    z.B.:
    in TextBox 1 steht der 01.02.2014
    jetzt soll von A2 bis A30 nach diesem Datum gesucht werden, wenn es vorhanden ist soll in TextBox 2 Inhalt aus z.B. A20 (Dort steht der 01.02.2014) drin ausgegeben werden und dann noch in Textbox3
    der Inhalt bei diesem Beispiel aus C20 dort steht eine Zahl drin.


    Kann ich einfach den Bereich so durchsuchen?

    VB.NET-Quellcode

    1. txt = Excel1.Range("A2").Value()



    Und wie mache ich es am besten mit dem Suchdatum aus der Textbox1??

    Hier einmal der ganze Code:


    VB.NET-Quellcode

    1. Dim Excel1 As New Microsoft.Office.Interop.Excel.Application
    2. Dim txt As String
    3. Excel1.Workbooks.Open("C:\WZ_T" & Now.Month.ToString("D2") & Now.Year.ToString.Substring(2) & ".xls")
    4. 'Excel1.Visible = True
    5. Try
    6. txt = Excel1.Range("A2").Value()
    7. TextBox9.Text = txt
    8. Catch ex As Exception
    9. MessageBox.Show("Datum nicht vorhanden.")
    10. Finally
    11. Excel1.Application.Quit()
    12. End Try




    Matthias
    Hallo carwashbuxtehude

    Prinzipiell zum öffnen einer Exceldatei zum Auslesen empfehle
    ich die Interop Datei von Microsoft Excel.
    Hierzu ein Link: (Sieht aber in ihrem Code schon gut aus kann es leider gerade nicht Testen :rolleyes: )
    dotnet-snippets.de/snippet/exc…e-auslesen-mit-vb-net/865

    Um mehrere Werte auszulesen könnte kann man eine For Each Schleife verwenden

    VB.NET-Quellcode

    1. for i = 1 to 250 ' Anzahl der zu durchsuchenden Zellen
    2. Dim value as String = Excel1.Range("Spaltenname"& i ).Value() ' Wert auslesen
    3. if value = TextBox1.text Then ' Vergleichen
    4. 'Hier der Code wenn das Datum stimmt...
    5. 'Danach wird die Schleife beenden
    6. exit for
    7. end if
    8. next



    Evtl ist es sinvoll das Datum aus der Exceldatei in das
    Format DATE zu konvertieren und statt einer Textbox ein DateTimePicker
    zu nehmen um Falsch eingaben zu vermeiden...

    Damit ein guten Start in die neue Woche Grüße

    MrNobody

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MrNobody“ ()

    Danke für die Hilfe!
    Habe es einmal versucht einzusetzen, bekomme aber den benötigten Wert nicht zurück.
    Ich muss doch noch bestimmt eintragen aus welchen Bereich ich eine Antwort haben möchte.



    Es soll ja so werden:
    Textbox1 gebe ich ein Datum ein z.B.: 01.02.2014.
    Jetzt soll der Bereich A2 bis A30 nach diesem Datum durchsucht werden.
    Wenn jetzt ein passendes Datum gefunden wird soll der Inhalt von der Zeile ausgegeben werden.

    z.B.: in A20 Steht jetzt das Datum 01.02.2014 in B20 300 steht eine Zahl und in C20 400 steht eine Zahl, die Zahlen sollen jetzt zusammen mit dem passendem DAtum ausgegeben werden.

    Dann würde stehen:
    TextBox1 01.02.2014
    Textbox2 01.02.2014
    Textbox3 300
    Textbox4 400


    Bis jetzt habe ich das, aber es wird nichts in der MsgBox angezeigt!

    VB.NET-Quellcode

    1. Private Sub christdatenXLS()
    2. Dim Excel1 As New Microsoft.Office.Interop.Excel.Application
    3. Dim txt As String
    4. Dim i As Integer
    5. Try
    6. Excel1.Workbooks.Open("C:\WZ_T0214.xls")
    7. 'Excel1.Visible = True ....wers braucht ?
    8. 'txt = Excel1.Range("A2").Value()
    9. For i = 0 To 250
    10. Next
    11. Dim value As String = Excel1.Range("A2" & i).Value() ' Wert auslesen
    12. If value = TextBox1.Text Then
    13. MessageBox.Show(txt)
    14. End If
    15. Catch ex As Exception
    16. MessageBox.Show("Datei nicht vorhanden.")
    17. Finally
    18. Excel1.Application.Quit()
    19. End Try
    20. End Sub




    Matthias
    Hallo,

    Jaja das gute alte C&P ...
    Kurz zu den Fehlern, Sie deklarieren txt As String verwenden es jedoch später nur zum Anzeigen, es wird also nicht mit einem Wert gefüllt...

    Probieren sie mal

    VB.NET-Quellcode

    1. MessageBox.Show(value)



    Der Zweite Fehler den ich grad sehe ist das Sie geschrieben habe

    VB.NET-Quellcode

    1. Excel1.Range("A2" & i)


    ersetzt man dies durch

    VB.NET-Quellcode

    1. Excel1.Range("A" & i)


    so bekommt man wenn i = 2 => A2 raus und nicht A22 ...



    Hier noch als Funktionierendes Beispiel mit 2 Textboxen und einem Button

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim ExcelApplication As New Microsoft.Office.Interop.Excel.Application
    2. Try
    3. ExcelApplication.Workbooks.Open("C:\.....\???.xlsx") 'Eigenen Pfad angeben ...
    4. For i = 1 To 200
    5. If Me.TextBox1.Text = ExcelApplication.Range("A" & i).Value() Then
    6. Me.TextBox2.Text = ExcelApplication.Range("B" & i).Value() + " " + ExcelApplication.Range("C" & i).Value()
    7. Exit For
    8. End If
    9. Next
    10. Catch ex As Exception
    11. MessageBox.Show("Datei nicht vorhanden.")
    12. Finally
    13. ExcelApplication.Application.Quit()
    14. End Try
    15. End Sub



    Grüße

    MRNobody

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „MrNobody“ ()

    So weit so gut!
    Er läuft alles durch und findet auch das Datum in der xls Datei.
    Bekomme aber nichts in die Textbox geschrieben und springt den in die

    VB.NET-Quellcode

    1. Catch ex As Exception!

    Meldung dort: {"Ungültige Konvertierung von der Zeichenfolge in Typ Double."}
    Ich vermute mal, das der Wert den ich zurückbekomme das falsche Format hat.
    In der Tabelle steht zwar eine ganze Zahl drin.
    Wie bekomme ich es den jetzt am besten hin, das die eingelesene Zahl ins richtige Format gewandelt wird???
    Oder liege ich damit falsch und die Meldung besagt etwas anderes????



    Matthias
    Hmm nee er will ja laut Fehler Meldung in das Format Double Konvertieren, handelt es sich um einer TextBox welche nur Zahlen zulässt ?

    Funktioniert das ?

    VB.NET-Quellcode

    1. MessageBox.Show(value)

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

    Ich wusste mir kommt der Code bekannt vor :D

    dotnet-snippets.de/snippet/exc…e-auslesen-mit-vb-net/865

    Wenn du aus Excel eine Zelle abfragen willst die als Datum formatiert ist und diese mittels .Value holst,
    was wird dann für ein Datentyp ankommen bzw. wie denkst du das, dass Datum dann aussieht?
    Setz mal Haltepunkte und schau was in deiner Variable steht dann sehen wir weiter.

    Der Junge hatte das selbe Problem: [VB 2012] Wie den Zelleninhalt einer Excel-Tabelle in eine Textbox schreiben?!?
    Wenn du nicht ganz auf der Leitung stehst brauchst du uns jetzt nicht mehr ;)
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Snaptu“ ()

    Jeder fängt mal an. :)

    Stehe gerade auf der Leitung und bekomme es einfach nicht hin.
    Bis jetzt sieht mein Code so aus und beim durchlaufen wird ales beim durchles durchlaufen, aber obwohl das Datum in der TAbelle steht bleibt es beim durchlaufen nicht dort stehen.


    VB.NET-Quellcode

    1. Private Sub christdatenXLS()
    2. Dim i As Integer
    3. Dim ExcelApplication As New Microsoft.Office.Interop.Excel.Application
    4. Try
    5. ExcelApplication.Workbooks.Open("C:\WZ_T" & Now.Month.ToString("D2") & Now.Year.ToString.Substring(2) & ".xls")
    6. For i = 1 To 10
    7. If Me.TextBox18.Text = ExcelApplication.Range("A" & i).Value() Then
    8. Me.TextBox10.Text = ExcelApplication.Range("C" & i).Value() + " " + ExcelApplication.Range("D" & i).Value()
    9. Exit For
    10. End If
    11. Next
    12. Catch ex As Exception
    13. MessageBox.Show("Datei nicht vorhanden.")
    14. Finally
    15. ExcelApplication.Application.Quit()
    16. End Try
    17. End Sub



    Variablen die dort stehen siehe Bild.

    Tabelle au der abgefragt wird habe ich auch einmal hochgeladen.



    MAtthias
    Bilder
    • Bild.JPG

      32,97 kB, 754×192, 175 mal angesehen
    Dateien
    • WZ_T0214.XLS

      (565 Byte, 142 mal heruntergeladen, zuletzt: )
    Wenn ich es so mache

    VB.NET-Quellcode

    1. Private Sub christdatenXLS()
    2. Dim i As Integer
    3. Dim ExcelApplication As New Microsoft.Office.Interop.Excel.Application
    4. Try
    5. ExcelApplication.Workbooks.Open("C:\WZ_T" & Now.Month.ToString("D2") & Now.Year.ToString.Substring(2) & ".xls")
    6. For i = 1 To 10
    7. If Me.TextBox18.Text = ExcelApplication.Range("A" & i).Value.ToString Then
    8. Me.TextBox10.Text = ExcelApplication.Range("C" & i).Value.ToString + " " + ExcelApplication.Range("D" & i).Value.ToString
    9. Exit For
    10. End If
    11. Next
    12. Catch ex As Exception
    13. MessageBox.Show("Datei nicht vorhanden.")
    14. Finally
    15. ExcelApplication.Application.Quit()
    16. End Try
    17. End Sub




    bekomme ich bei

    VB.NET-Quellcode

    1. Catch ex As Exception



    Die Meldung:

    {"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."}



    Großes ????
    Mach mal Option Strict ON.

    Ausserdem kann ich dir nur den Tipp geben das du da grade falsch an die Sache herangehst. In welchem Format liegen dir die Daten vor?
    Das was du da hast ist es schon fast Wert ein Datenmodell daraus zu machen und ein DGV zu nutzen wo du dir Sachen Anzeigen/Filtern usw. kannst.
    Du brauchst dazu nichtmal eine Datenbank. Bei der Menge an Feldern die du da hast reicht das halten der Daten in einer .xml vollkommen.

    Ist wesentlich eleganter als dieses Excel gemurkse.

    Ich möchte garnicht wissen für was die Textboxen 17-1 da sind. das ist einfach nicht schön und verfehlt den Sinn dieses Controls.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Snaptu“ ()

    Dann würde ich dir trotzdem Raten nicht 20 Textboxen als Filter-Werkzeug zu benutzen sondern dich an sowas zu probieren.

    [VB 2010] DatasetOnly: DB-Programmierung ohne Datenbank
    [VB.NET] Daten laden, speichern, verarbeiten - einfachste Variante

    Du kannst dann nach belieben den DGV Filtern und hast auch eine viel bessere Chance deine "Datenbank" zu erweitern. Aber da ist ErfinderDesRades der Guru hier :D
    Ich sehs nämlich schon so kommen das du dein Progrämmchen jetzt so fertig murkst, dann willst du was ändern kannst es aber nicht weil du beim Anfangen nicht über
    den Tellerrand geblickt hast.

    z.b. ist das was die Anlage ausspuckt als .csv auch relativ einfach zu verarbeiten:

    Quellcode

    1. 01.02.2014;17:06:38;258;105;84;46;23;0;0;0;0;0;0;0;0;0;0;0;0;11;3;0;0;0;0;0;0;31
    2. 02.02.2014;16:42:19;140;53;46;30;11;0;0;0;0;0;0;0;0;0;0;0;0;7;3;0;0;0;0;0;0;9
    3. 03.02.2014;18:06:54;223;88;73;51;11;0;0;0;0;0;0;0;0;0;0;0;0;12;1;0;0;0;0;0;0;27
    4. 04.02.2014;18:06:54;223;88;73;51;11;0;0;0;0;0;0;0;0;0;0;0;0;12;1;0;0;0;0;0;0;27
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.
    Die Daten werden von einer Steuerung werden in die Tabelle WZ_T0214 geschrieben.
    Die Datei wird jeden Abend mit neuen Daten zum aktuellen Datum gefüllt.
    Also gibt es nur diese Tabelle um an die Daten zu kommen.


    Zum weiteren verarbeiten brauche ich nur die Tageszahlen aus dem entsprechenden Bereich.
    habe es jetzt mal so versucht.
    Habe jetzt nur das Problem das ich in der ersten Zeile Wörter stehen habe.
    Daten werden aber rausgelesen.


    VB.NET-Quellcode

    1. Dim pfad As String
    2. pfad = "C:\WZ_T" & Now.Month.ToString("D2") & Now.Year.ToString.Substring(2) & ".xls"
    3. Try
    4. If File.Exists(pfad) Then
    5. Dim a As Integer = 1
    6. Else
    7. MsgBox("Keine Datei vorhanden!")
    8. End If
    9. Dim sr As System.IO.StreamReader = New System.IO.StreamReader(pfad)
    10. Dim line As String
    11. Dim breaker As Boolean = False
    12. Dim dataDate As Date
    13. Do
    14. Try
    15. line = sr.ReadLine()
    16. Dim parts() = line.Split({" "c}, StringSplitOptions.RemoveEmptyEntries)
    17. Dim parts2() = parts(1).Split(" "c)
    18. Dim parts3() = parts(1).Split(" "c)
    19. Dim parts4() = parts(1).Split(" "c)
    20. dataDate = Convert.ToDateTime(parts(0))
    21. If dataDate.Day = Now.Day And dataDate.Month = Now.Month And dataDate.Year = Now.Year Then
    22. TextBox8.Text = parts(0)
    23. TextBox1.Text = parts2(3) '3 ist die Anzahl der leerstellen
    24. TextBox2.Text = parts(2)
    25. TextBox3.Text = parts(3)
    26. TextBox4.Text = parts(4)
    27. TextBox5.Text = parts(5)
    28. TextBox6.Text = parts(18)
    29. TextBox7.Text = parts(20)
    30. End If
    31. Catch ex As Exception
    32. breaker = True
    33. End Try
    34. Loop Until breaker = True
    35. sr.Close()
    36. Catch el As Exception
    37. Console.WriteLine("The process failed: {0}", el.ToString())
    38. End Try






    Matthias
    Bilder
    • bild.JPG

      56,23 kB, 756×502, 147 mal angesehen
    komisch, wieso kann man in einer textbox kein Date Datentyp anzeigen....
    Ich probiers nochmal, eine Textbox ist KEIN Control das zum Filtern gedacht ist (meine Meinung).
    Bis jetzt hast du es nämlich ignoriert dein Programm ordentlich zu machen.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.