Labelinhalte mit Schleife in Excel Tabelle

  • VB.NET
  • .NET (FX) 3.0–3.5

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

    Labelinhalte mit Schleife in Excel Tabelle

    Hallo Community,

    der Export in Excel und Schleifen sind sehr häufige Themen in Hilfequellen nur leider hab ich keine Lösung gefunden oder Sie nicht als solche erkannt.

    In meiner Hauptform lese ich mit Hilfe mehrerer mysql Abfragen eine Datenbank aus und die Antworten schreibe ich in eine Reihe von Labels. Danach gibt es die Möglichkeit den Inhalt dieser Labels in eine Excel Tabelle zu exportieren.
    Das Programm funktioniert fehlerfrei, zumindest habe ich noch keine Fehler gefunden. Ich möchte nun aber den Code mit Hilfe der Schleifen Programmierung vereinfache und verringern.

    Folgendermaßen sieht der Code im Moment aus:

    VB.NET-Quellcode

    1. Private Sub btn_export_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_export.Click
    2. Dim xlApp As Microsoft.Office.Interop.Excel.Application
    3. Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
    4. Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
    5. Dim misValue As Object = System.Reflection.Missing.Value
    6. Dim i As Integer
    7. Dim j As Integer
    8. xlApp = New Microsoft.Office.Interop.Excel.Application
    9. xlWorkBook = xlApp.Workbooks.Add(misValue)
    10. xlWorkSheet = xlWorkBook.Sheets("Tabelle1")
    11. xlWorkSheet.Cells(3, 3) = lbl1_2.Text'
    12. xlWorkSheet.Cells(4, 3) = lbl2_2.Text
    13. xlWorkSheet.Cells(5, 3) = lbl3_2.Text
    14. xlWorkSheet.Cells(6, 3) = lbl4_2.Text
    15. xlWorkSheet.Cells(7, 3) = lbl5_2.Text
    16. xlWorkSheet.Cells(8, 3) = lbl6_2.Text
    17. xlWorkSheet.Cells(9, 3) = lbl7_2.Text
    18. xlWorkSheet.Cells(10, 3) = lbl8_2.Text
    19. xlWorkSheet.Cells(11, 3) = lbl9_2.Text
    20. xlWorkSheet.Cells(12, 3) = lbl10_2.Text
    21. xlWorkSheet.Cells(13, 3) = lbl11_2.Text
    22. xlWorkSheet.Cells(14, 3) = lbl12_2.Text
    23. xlWorkSheet.SaveAs(("D:\") + tbox.Text + (".xlsx"))
    24. xlWorkBook.Close() xlApp.Quit()
    25. releaseObject(xlApp)
    26. releaseObject(xlWorkBook)
    27. releaseObject(xlWorkSheet)
    28. Dim res As MsgBoxResult
    29. res = MsgBox("Export abgeschlossen, möchten Sie die Tabelle jetzt öffnen?", MsgBoxStyle.YesNo)
    30. If (res = MsgBoxResult.Yes) Then
    31. Process.Start(("D:\") + tbox.Text + (".xlsx"))
    32. End If
    33. End Sub


    die Zeihlen 13 bis 24 wiederholen sich zu bestimmten Bedingungen im Extremfall 48 mal.
    Mit folgendendem Code wollte ich hier vereinfachen:

    VB.NET-Quellcode

    1. For i = 3 To 14
    2. For j = 1 To 12
    3. xlWorkSheet.Cells(i, 3) = Me.Controls("lbl" & j & "_2").Text
    4. 'xlWorkSheet.Cells(i, 3) = CType(Controls("lbl" & j & "_2"), Label).Text
    5. Next
    6. Next


    Auch der Code im Kommentar funktioniert nicht.

    Fehlermeldung ist folgende: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

    Dazu bekomme ich die Hilfe eine Objektinstanz mit dem Schlüsselwort "new" zu erstellen.

    Aber hier verlässt es mich dann.
    Ich habe die Programmierung weitesgehend mit Büchern und Internet gemeistert und auch verstanden. Nur hier stehe ich auf dem Schlauch.
    Ich hoffe Ihr könnt mir helfen.
    Deine Schleifen machen überhaupt nicht das, was du willst. Du hast verschachtelte Schleifen, d.h. für jedes i läuft die j-Schleife, was keinen Sinn ergibt.

    Du musst nur die eine i-Schleife drin lassen und den Namen vom Label als i-2 berechnen.

    Und mache bitte OPTION STRICT ON. j ist ein Integer, du behandelst es aber als String...

    VB.NET-Quellcode

    1. xlWorkSheet.SaveAs(("D:") + tbox.Text + (".xlsx"))

    Wozu die Klammern?

    VB.NET-Quellcode

    1. releaseObject(xlApp)
    2. releaseObject(xlWorkBook)
    3. releaseObject(xlWorkSheet)


    Wenn du erst xlApp releast, dann sind die anderen doch mit weg und nicht ansprechbar? Du musst die Reihenfolge umdrehen.
    Stell deinen neuen Code rein und die Zeilennummer, in der du Exception bekommst.

    Ah, ich weiß schon, deine Labels befinden sich bestimmt in einem weiteren Control wie Panel usw. Deswegen kann Me.Controls sie nicht finden.

    Mache es einfacher:

    VB.NET-Quellcode

    1. Dim lstLabel={lbl1_2, lbl2_2, lbl3_2} 'und der Rest
    2. For i= 0 To 11
    3. xlWorkSheet.Cells(i+3, 3) = lstLabel(i).Text
    4. Next

    Hallo sonne75,

    es tut nun das was es soll.
    Ich verwende folgenden Code:

    VB.NET-Quellcode

    1. Dim lstlabel () = {lbl1_2, lbl2_2, lbl3_2, lbl4_2} ' etc bis lbl12_2
    2. For i = 0 to 11
    3. xlworksheet.cells(i+3, 3) = lstlabel(i)
    4. Next


    VIELEN Dank!

    SOAN schrieb:

    in deinem Code fehlten nur noch die runden Klammern hinter dem Arraynamen.

    Nein, fehlten sie nicht. Der Compiler weiß bei INFER ON selbst, wie er das zu interpretieren hat, nach dem = steht ja, dass es wie ein Array zu behandeln ist. Ich schreibe sie bei dieser Schreibweise nie (wenn gleich eine Zuweisung erfolgt).
    Sorry mein Fehler.
    Du hast natürlich recht
    Ich habe den Code nicht komplett eingegeben. Da ich an dem vb.Rechner keinen Internetzugang habe.

    Richtig ist folgender Code

    VB.NET-Quellcode

    1. Dim lstlabel () = {lbl1_2, lbl2_2, lbl3_2, lbl4_2} ' etc bis lbl12_2
    2. For i = 0 to 11
    3. xlworksheet.cells(i+3, 3) = lstlabel(i).text
    4. Next


    So wird er auch verwendet.