Zeilen Zählproblem (.net+ Excel)

  • VB.NET
  • .NET (FX) 4.0

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Lord C.

    Zeilen Zählproblem (.net+ Excel)

    Guten Tag VBP-Community,

    ich brauche mal kurz eure hilfe.
    Und zwar lese ich eine Exceldatei in mein Programm ein und möchte nun die Zeilen zählen, das geht ja auch mit rows.count, aber nun Zählt er mit alle Zeilen. Ich aber möchte nur die Zeilen zählen wo was in der ersten Spalte drin steht. Gibt es da eine elegante vorgenerierte Lösung oder muss ich mir da was selber basteln.
    Ich bitte um Tipps um das verdammte problem zu lösen, denn es sorgt dafür dass in der darauffolgenden auslese schleife sobald ich auf eine leere zeile treffe die Sub ohne weiteres beendt wird. und dh bräuchte ich die genau anzahl an Zeilen.

    LG

    Lord C

    Lord C schrieb:

    wo was in der ersten Spalte drin steht.
    Da musst Du die Tabelle mit einem geeigneten ConnectionString auslesen oder die Zeilen "zu Fuß" durchklickern.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hab hier mal den codeausschnistt:

    Die Hauptmethode

    VB.NET-Quellcode

    1. Dim auswahlAutos As New ObjectModel.Collection(Of autoSammlung)
    2. Dim readExcel As New Microsoft.Office.Interop.Excel.Application
    3. Public Sub fillCarList()
    4. Dim fi As System.IO.FileInfo
    5. Dim di As System.IO.DirectoryInfo
    6. Dim _excelRows As Integer
    7. Dim _excelColums As New List(Of String)
    8. _excelColums.Add("A")
    9. _excelColums.Add("B")
    10. _excelColums.Add("C")
    11. _excelColums.Add("D")
    12. _excelColums.Add("E")
    13. _excelColums.Add("F")
    14. _excelColums.Add("G")
    15. _excelColums.Add("H")
    16. _excelColums.Add("I")
    17. _excelColums.Add("J")
    18. di = New System.IO.DirectoryInfo(Application.StartupPath.ToString)
    19. fi = New System.IO.FileInfo(System.IO.Path.Combine(di.FullName, "Getriebe.xlsx"))
    20. With readExcel
    21. .Workbooks.Open(fi.FullName)
    22. .Visible = True
    23. End With
    24. _excelRows = _setRowCount()
    25. For i As Integer = 0 To _excelRows - 2
    26. auswahlAutos.Add(New autoSammlung())
    27. For h As Integer = 0 To 9
    28. auswahlAutos(i).createCar(h, _rowsOutPut(i + 2, _excelColums(h)))
    29. Next
    30. auswahlAutos(i).setToList()
    31. Next
    32. With readExcel
    33. .Workbooks.Close()
    34. End With
    35. For i As Integer = 0 To auswahlAutos.Count - 1
    36. ComboBox1.Items.Add(auswahlAutos(i).zusammen(0))
    37. Next
    38. For i As Integer = 0 To ComboBox1.Items.Count - 1
    39. If ComboBox1.Items(i).ToString = "" Then
    40. ComboBox1.Items.RemoveAt(i)
    41. End If
    42. Next
    43. End Sub
    44. Public Function _rowsOutPut(rows As Integer, columes As String) As String
    45. Return readExcel.Range(columes & rows).Value.ToString
    46. End Function
    47. Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
    48. Call fillCarList()
    49. End Sub



    Die Klasse autoSammlung(Speicherklasse zur weiter Verarbeitung)

    VB.NET-Quellcode

    1. Public Class autoSammlung
    2. Private autoName As String
    3. Private achse1 As Decimal
    4. Private achse2 As Decimal
    5. Private gang1 As Decimal
    6. Private gang2 As Decimal
    7. Private gang3 As Decimal
    8. Private gang4 As Decimal
    9. Private gang5 As Decimal
    10. Private gang6 As Decimal
    11. Private gang7 As Decimal
    12. Private gang8 As Decimal
    13. Public zusammen As New List(Of String)
    14. Public Sub setToList()
    15. zusammen.Add(autoName)
    16. zusammen.Add(achse1.ToString)
    17. zusammen.Add(achse2.ToString)
    18. zusammen.Add(gang1.ToString)
    19. zusammen.Add(gang2.ToString)
    20. zusammen.Add(gang3.ToString)
    21. zusammen.Add(gang4.ToString)
    22. zusammen.Add(gang5.ToString)
    23. zusammen.Add(gang6.ToString)
    24. zusammen.Add(gang7.ToString)
    25. zusammen.Add(gang8.ToString)
    26. End Sub
    27. Private Sub setAutoName(name As String)
    28. autoName = name
    29. End Sub
    30. Private Sub setAchseEins(achse As Decimal)
    31. achse1 = achse
    32. End Sub
    33. Private Sub setAchseZwei(achse As Decimal)
    34. achse2 = achse
    35. End Sub
    36. Private Sub setGang(getInput As Integer, gang As Decimal)
    37. Select Case getInput
    38. Case Is = 3
    39. gang1 = gang
    40. Case Is = 4
    41. gang2 = gang
    42. Case Is = 5
    43. gang3 = gang
    44. Case Is = 6
    45. gang4 = gang
    46. Case Is = 7
    47. gang5 = gang
    48. Case Is = 8
    49. gang6 = gang
    50. Case Is = 9
    51. gang7 = gang
    52. Case Is = 10
    53. End Select
    54. End Sub
    55. Public Sub createCar(wert As Integer, reader As String)
    56. Select Case wert
    57. Case Is = 0
    58. Call setAutoName(reader)
    59. Case Is = 1
    60. Call setAchseEins(CDec(reader))
    61. Case Is = 2
    62. Call setAchseZwei(CDec(reader))
    63. Case Else
    64. setGang(wert, CDec(reader))
    65. End Select
    66. End Sub
    67. End Class


    Um mein Kommentar, dies ist die gemeinte schleife. Ich hoffe ihr kommt jetzt weiter

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Lord C“ ()

    Ersetze

    Lord C schrieb:

    VB.NET-Quellcode

    1. List(Of String)
    durch DataTable, da kannst Du die Daten typisiert reinschreiben und ordentlich mit arbeiten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Lord C schrieb:

    die zeilen
    Posta bitte mal ein paar Beispiele mit und ohne Leer-Stelle.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich glaube ich hab mich falsch ausgedrückt :whistling:

    hier mal ein kurzes beispiel vom aufbau her


    A
    was passiert
    1
    555
    nächste zeile
    2
    555
    nächste Zeile
    3
    555
    nächste Zeil
    4

    hier passiert der Fehler er springt raus aus der sub und über springt den rest des Codes
    ich hoffe es ist so versändlich, es sind immer die Spalten befüllt bis zum letzten wert es befindet sich zwischen den werten kein zwischen raum nur am ende
    hier passiert der Fehler er springt raus aus der sub und über springt den rest des Codes
    Wo steht deine Sub oder wo wird die Sub aufgerufen? (etwa im Form.Load-Ereignis?)
    Es wird wahrscheinlich eine Exception nicht abgefangen _rowsOutPut(i + 2, "A") Is Nothing ???

    Lord C schrieb:

    sie wird im load aufgerufen
    Mach das mal im Form_Shown-Event.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ ROd guck mal zwei post über deinen :D da hat es schon jmd erwähnt und nun bekomme ich die gennate fehler meldung

    Edit: Jedesmal wenn ich versuche mit .range("A1").value.tostring einen wert auszulesen schmeißt er mir die nullreferenz -.- direkt beim start schon obwohl ich eine prüfend zeile gesetzt habe.

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

    Lord C schrieb:

    guck mal
    :love:
    Ich bin am Absenden des Posts gehindert worden, da fehlt halt die Warnung, dass inzwischen weitere Posts geschickt wurden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!