Inhalt mehrerer Zellen in neue Zelle schreiben

  • VB.NET

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

    Inhalt mehrerer Zellen in neue Zelle schreiben

    Liebe Community

    Ich pröble schon lange und brauche jetzt eure Hilfe! In meiner Anwendung lesen ich den Inhalt eines txt-files aus und erstelle damit ein Excel, welches gespeichert wird.

    Mein Code sieht folgendermassen aus:

    VB.NET-Quellcode

    1. Using csvParser As New TextFieldParser(FilePath)
    2. With csvParser
    3. .SetDelimiters(";")
    4. .HasFieldsEnclosedInQuotes = True
    5. Dim header As String = .ReadLine()
    6. Dim FieldData() As String
    7. Do While Not .EndOfData
    8. FieldData = .ReadFields()
    9. Debug.Print(FieldData(0))
    10. wert = FieldData(0)
    11. If wert = "" Then
    12. wert = Nummer
    13. Nummer = Nummer + 1
    14. sheetStandort.Range("A" & iStandort).Value = wert
    15. Else
    16. sheetStandort.Range("A" & iStandort).Value = wert
    17. End If
    18. iStandort = iStandort + 1
    19. Loop
    20. End With
    21. End Using
    22. iStandort = 1
    23. Using csvParser As New TextFieldParser(FilePath)
    24. With csvParser
    25. .SetDelimiters(";")
    26. .HasFieldsEnclosedInQuotes = True
    27. Dim header As String = .ReadLine()
    28. Dim FieldData() As String
    29. Do While Not .EndOfData
    30. FieldData = .ReadFields()
    31. Debug.Print(FieldData(1))
    32. wert = FieldData(1)
    33. sheetStandort.Range("B" & iStandort).Value = wert
    34. iStandort = iStandort + 1
    35. Loop
    36. End With
    37. End Using


    Nun möchte ich den Inhalt aus den generierten Zellen A und B in einer neuen Zelle C abfüllen. Ich komme nicht weiter und hoffe, ihr könnt mir helfen!
    Vielen Dank schon jetzt!
    ist das dieselbe Datei, die 2mal eingelesen wird?
    probierma

    VB.NET-Quellcode

    1. Using csvParser As New TextFieldParser(FilePath)
    2. With csvParser
    3. .SetDelimiters(";")
    4. .HasFieldsEnclosedInQuotes = True
    5. Dim header As String = .ReadLine()
    6. Dim FieldData() As String
    7. Do While Not .EndOfData
    8. FieldData = .ReadFields()
    9. Dim wertA = FieldData(0)
    10. Debug.Print(wert)
    11. If wertA = "" Then
    12. wertA = Nummer.ToString
    13. Nummer = Nummer + 1
    14. End If
    15. sheetStandort.Range("A" & iStandort).Value = wertA
    16. iStandort = iStandort + 1
    17. Dim wertB = FieldData(1)
    18. sheetStandort.Range("B" & iStandort).Value = wertB
    19. iStandort = iStandort + 1
    20. sheetStandort.Range("C" & iStandort).Value = wertA & wertB
    21. Loop
    22. End With
    23. End Using




    Willst du richtig proggen erlernen?
    Dann erster Schritt Option Strict On.
    Oder Besser gleich ganz richtig machen: Visual Studio - Empfohlene Einstellungen
    no excuses.
    Danke für die schnelle Antwort! Richtig proggen? Ist ein Wunsch von mir und ich arbeite daran.....

    Ja, es wird 2x die gleiche Datei eingelesen. So wie du es machst ist das viel eleganter...

    Ich habe deinen Code probiert und etwas angepasst. Im erstellten Excel waren die Zellinhalte versetzt... Jetzt ist nur noch die erste Spalte versetzt... Muss ich noch pröbeln...

    VB.NET-Quellcode

    1. sheetStandort.Range("A" & iStandort).Value = wert 'A
    2. iStandort = iStandort + 1
    3. sheetStandort.Range("A" & iStandort).Value = wertA
    4. Dim wertB = FieldData(1)
    5. sheetStandort.Range("B" & iStandort).Value = wert 'B
    6. iStandort = iStandort + 1
    7. sheetStandort.Range("B" & iStandort).Value = wertB
    8. sheetStandort.Range("C" & iStandort).Value = wertA & wertB
    Jetzt hab ich auch das mit dem Versetzen kapiert...

    Ich habe iStandort = iStandort + 1 direkt vor den Loop gesetzt und alle anderen gelöscht! Jetzt passt es bestens!

    Vielen Dank!

    Jetzt hab ich noch ein andere Herausforderung... Ich habe bei meinem Projekt eine Accsess DB als Datenquelle angehängt. Der Wert aus Spalte "C" ist ein eindeutiger Wert, welchen ich jetzt mit der DB abgleichen will. Kommt der Wert in der DB vor, will ich weitere Werte aus der DB in mein Excel schreiben... Machbar?

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

    ja, die habe ich bewältigt. ich habe Option Strict Off von Hand eingetragen und wieder gelöscht. erhielt keine fehler.... meine Standardeinstellung ist Option Strict Off... das ist schon richtig so oder?

    wenn du mir bei meinem Projekt Daten vergleichen/ergänzen helfen könntest, wäre das sensationell.... ich will es lernen!

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

    Option Strict On wäre die richtige Einstellung. Off ist Standard, wenn du dann händisch Off in die Datei schreibst kann es dir ja auch keine Fehler zeigen.

    Hier noch zum Nachlesen was es eigentlich bedeutet.
    docs.microsoft.com/de-de/dotne…s/option-strict-statement
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    mit bewältigen meinte ich aber nicht nur Strict On, sondern auch die Deppen-GEneralImporte.
    Also nochmal: Visual Studio - Empfohlene Einstellungen - wirklich lesen und umsetzen - beides. Vollständig. Also in jedem Projekt, und zusätzlich in den Projekt-Templates, damit neue Projekte garnet mehr erst an diesem Quatsch kranken.
    Ich habe bei meinem Projekt eine Accsess DB als Datenquelle angehängt. Der Wert aus Spalte "C" ist ein eindeutiger Wert, welchen ich jetzt mit der DB abgleichen will. Kommt der Wert in der DB vor, will ich weitere Werte aus der DB in mein Excel schreiben... Machbar?
    sicherlich machbar. verschiedene möglichkeiten.
    Das einfachste wird sein, die ganze Datenbank-Tabelle abzurufen, und das selectieren dann im Vb-Code zu machen.

    Allerdings ist "AccessDb als Datenquelle angehängt" eine überaus schwammige Formulierung, und dementsprechend schwammig kann auch nur die Hilfe ausfallen.
    Evtl. meinst du damit ja etwas, was man im Projektmappen-Explorer sehen kann.
    Kannst du vlt. ein Screenshot von deim Projektmappen-Explorer machen und anhängen?
    Hilfe zum Anhängen:

    (Da wird auch das mittm DateiUpload erklärt)
    Hallo
    Meine Formulierung ist tatsächlich etwas schwammig... Also mit deiner Hilfe habe ich es ja schon geschafft, dass ich ein txt auslesen und nach meinen Wünschen ein Excel erstellen kann. Im Excel generiere ich die Spalte F, deren Wert ist eindeutig ist. Als Datenquelle habe ich eine AccessDb verbunden. In dieser DB existiert die Spalte AdressIndex (siehe Print). Jetzt möchte ich den Inhalt der Spalte F aus dem Excel mit den Werten der Spalte AdressIndex der DB vergleiche. Sollte es eine Übereinstimmung geben, will ich die Werte aus Lat und Lon aus der DB ins Excel schreiben. Ich hoffe, es ist jetzt etwas weniger schwammig und verständlich formuliert. Besten Dank!
    Bilder
    • Datenquelle.PNG

      35,78 kB, 856×493, 99 mal angesehen
    So, jetzt weiss ich, was du unter "AccessDb als Datenquelle angehängt" verstehst.
    Ist prinzipiell auch garnet so schlecht, nur deine AccessDb gefällt mir überhaupt nicht. Auf diesem Datenmodell solltest du keine Anwendung aufbauen.
    Sondern erstmal das Datenmodell überdenken, verschlanken, entrümpeln, sinnig + verständlich + systematisch benamen, vmtl. auch die Datentypen korrigieren.
    Ich schlage dir sogar vor, die Db erstmal wegzulassen, und das Datenmodell komplett einfach im typDataset entwickeln - ist viel einfacher als die Db dabei ständig mitzuschleppen.

    Bereit dazu?

    Wenn ja, poste erstmal den Ist-Stand, also Name der Tabelle, sowie alle ihre Spalten, und zu jeder Spalte deren Datentyp und Zweck
    (Mit Forum-Mitteln kann man auch eine tabelle erstellen)
    So! Jetzt geht es weiter... war leider völlig ausgebucht...

    Habe jetzt eine DataTable erstellt.
    AdressID: System.String, Zusammengesetzt aus PLZ/Strasse/Nr, dieser Wert soll als Identifikator dienen
    PLZ: System.Int16, ist die PLZ der Gemeinde, wird als Teilidentifikator benötigt
    Strasse: System.String, ist die Strasse in der Gemeinde, wird als Teilidentifikator benötigt
    Nr: System.String, ist die Hausnummer in der Strasse, wird als Teilidentifikator benötigt
    Lat: System.Int32, sind die Breitengrade dieser Adresse, dieser Wert soll in der abzugleichenden Tabelle ergänzt werden
    Lon: System.Int32, sind die Breitengrade dieser Adresse, dieser Wert soll in der abzugleichenden Tabelle ergänzt werden
    Bilder
    • DataTable.png

      25,06 kB, 471×500, 111 mal angesehen

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

    Nur eine Tabelle? - ok
    Ich würde dir nur eine sinnigere Benamung empfehlen.
    Was im Designer als Tabelle dargestellt wird, stellt viele davon dar.
    Du erhälst also im Code genz viele DataTable1Rows - und das ist grauenhaft.
    Weil jede dieser DataRows stellt eine Addresse dar.
    Die Tabelle muss also Addresse heissen - singular übrigens.
    Ebenfalls sehr empfohlen, den PrimKey einfach ID zu nennen - im Gegensatz dazu ForeignKeys <TabellenName>Id

    Jo, die Tabelle müssteste dann vonne DB befüllen, und dann das Excel durchgehen, und für jede Excel-Zeile inne AdresseTable nachgugge, ob was zuordnebares sich findet.

    (Ups - ich hab den Primkey festzulegen vergessen!)
    Bilder
    • Addresse.png

      2,89 kB, 171×160, 392 mal angesehen
    Also ich habe die Tabelle angepasst. Ausserdem habe ich meine AccessDB, welche ich ja ursprünglich meinem Projekt "angehängt" habe, angepasst. Es macht aus meiner Sicht keinen Sinn, Daten die die erstellte Tabelle abzufüllen, wenn ich sie ja schon vorhanden habe. Oder sehe ich das falsch? Ich möchte jetzt die Daten aus dem Excel mit den Daten aus der Tabelle abgleichen. Wenn sie gefunden wird, sollen die Daten aus Lat und Lon im Excel an die jeweilige Stelle abgefüllt werden. Muss ich dazu die Excel-Daten in eine Tabelle abfüllen?
    Bilder
    • Übersicht.PNG

      125,57 kB, 1.971×1.096, 111 mal angesehen

    blam schrieb:

    Es macht aus meiner Sicht keinen Sinn, Daten die die erstellte Tabelle abzufüllen, wenn ich sie ja schon vorhanden habe. Oder sehe ich das falsch?
    sry, den Satz verstehe ich nicht.



    Aber in post#15 empfahl ich, die Db erstmal wegzulassen, und frug, ob du bereit dazu seist.
    Und nun hampelste schon wieder mit dem Ding herum.

    Statt in eine 5mb-Datenbank datei speicherst du die daten einfach mit Dataset.WriteXml in eine 10Kb-xml-Datei.