Excel Daten aufrufen und in VB übertragen sowie ändern.

  • VB.NET

Es gibt 54 Antworten in diesem Thema. Der letzte Beitrag () ist von Otti.

    Excel Daten aufrufen und in VB übertragen sowie ändern.

    Guten Tag zusammen.

    Hab damal ein Problem. Möchte in VB eine Kundendatenbank erstellen die mit einer Exceltabelle kombiniert werden soll.
    In der Combobox soll beispielweise die Spalte 1 aus der Exceltabelle übertragen werden, und bei Auswahl die passenden Daten wie Name und strasse ..... eingefügt werden, also z.B. "(6B) = Wohnort"
    Gelichzeitig will ich die aufgerufenen Daten in den TextBoxen ändern können das diese auch in der Exceltabelle gesepciehrt sind und das ohne sich die Exceltabelle öffnet bzw diese offnen sein muss.
    Bilder
    • Unbenannt.PNG

      8,62 kB, 984×552, 301 mal angesehen
    ich kann dir nur zeigen, wie man so Zeug im typisierten Dataset gestalten kann: vier Views-Videos
    Das Dataset ist dabei das wesentliche, vergleichsweise unwesentlich ist, wie du es befüllst, ob nun aus einer Datenbank oder aus einer Excel-Datei.

    Wobei es bei dir natürlich denkbar ungünstig ist, dass du alles gleichzeitig haben willst: Ein Gui mit Comboboxen, und kombinierte Persistenz sowohl als DB als auch in Excel - und was hier "kombiniert" im einzelnen bedeutet ist auch noch völlig undefiniert.

    Also für sowas "komisches" wird dir niemand eine Vorlage liefern können, und selbst lösen kannst du das glaub nur, wenn du alle 3 Bereiche - typ Dataset, DB-Zugriffe, Excel-Zugriffe - wirklich beherrscht.
    Und dann musst du noch kreativ werden, weil Standard ist das nicht.
    @ErfinderDesRades

    Okey ist dann doch zu hoch für mich, fang dann mal anders an und bleibe nur bei VB.
    Angenommen ich speicher meine Datenbank mit den Kundendaten über VB also hiermit,

    Quellcode

    1. [b][/b]My.Computer.FileSystem.WriteAllText("test.txt", tb1.Text, False)
    2. [b][/b]


    wie kann ich denn dann den Code anwenden, in Verbindung mit der Combobox ?
    Da muss ja dann der aktuell aufgerufe Eintrag in der Combobox abrufbar sein als Code, als ich meine
    z.B. Combobox1.Aktuelle
    Aber wie???
    ui - wenn du eine TextDatei als Datenbank bezeichnest, dann musst du wohl ganz von vorn anfangen.

    zu erlernen wäre:
    1. Grundeinstellungen
      1. Option Strict On! - dass du Datentypen unterscheidest
      2. böse Funktionen vermeiden - dass du nicht ollen vb6-Konzepten aufsitzt
      3. beide Unterpunkte sind mittlerweile in Empfohlene Grundeinstellungen behandelt, insbesondere die Anleitung zur Umstellung der Grundeinstellung findet hier ausführliche Behandlung.
    2. Grundlegende Fachbegriffe - fehlt die gemeinsame Sprache, so muss jede Hilfe versagen
    3. Recherche- und Debug-KnowHow: Visual-Studio richtig nutzen
    4. Aus der Bücherliste wähle ein gutes Buch (also keins von "Theiss"):
      Methoden, Properties, Klassen, Vererbung, Interfaces, Events, Generics, Enumerationen, Verzweigungen, Schleifen, ... - letztendlich muss (und wird) man es lernen, und der durchdachte Aufbau eines guten Buches ist da vielfach effizienter als das Zusammenstoppeln gemeingefährlichen "Learning by Doing" - Halbwissens.
    5. (jetzt fängts erst an mitte Datenbänkerei - und zwar Theorie): Relationale Datenmodellierung
    6. vier Views-Videos - gewissermaßen eine Vorschau auf die Möglichkeiten, die Datenbanking bietet (weil bisher wurde ja noch kein Datensatz abgespeichert)
    7. Daten laden, speichern, verarbeiten
    8. Bislang gings nur um Funktionalität. Aber (fast) keine Funktionalität ohne Oberfläche, und keine Oberfläche ohne Layout: Layout-Konzepte in WinForms.
    9. Datenbank hinterlegen
    10. 6. und 8. kannst du dir um ein Vielfaches leichter machen, wenn du ein Helper-Projekt einbinden kannst.
    Zwischenzeitlich habich auch ein umfangreiches, englisches Tut verzapft, was die Punkte 5, 6, 7 im Zusammenhang erarbeitet:
    From Relational Datamodel to Rich Application (3 articles)
    Ist zum Lernen sicher wesentlich effektiver als die 3 Einzel-Tuts, die jeweils ein erschlagendes Schlaglicht werfen, auf ihr jeweiliges Thema.

    Dieser Beitrag wurde bereits 22 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @ErfinderDesRades

    Hey. Habe nun soweit meine Datenbank mit VB und Excel kombiniert, habe allerdings folgendes Problem, wenn ich meine Daten aus VB in Excel übertrage kommt es ab und zu vor das Excel eine Meldung herraus gibt. Habe bis jetzt noch nicht genau herraus finden können wieso und wann das immer genau passiert. Hast du evt. eine Idee?

    Meldung wenn ich Daten in Excel übertrage: " öffnen.xlsx ist zum Bearbeiten durch Otti gesperrt", obwohl dieses Datei garnicht geschützt ist ???

    was mach ich falsch??

    Quellcode

    1. Private Sub Brechnungerstellen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Brechnungerstellen.Click
    2. 'xls_Appl.Application.Quit()
    3. xls_Appl = CreateObject("Excel.Application")
    4. xls_Appl.Workbooks.Add()
    5. xls_Appl.Workbooks.Open(ExcelDateiöffnen)
    6. xls_Appl.Worksheets(1).Select(1) ' Tabelle 1 auswählen
    7. xls_Appl.Visible = False ' Excel soll nicht sichtbar sein
    8. 'Datensatz der nach Excel übertragen wird
    9. xls_Appl.ActiveSheet.cells(5, 2) = (Tvorname.Text & " " & Tnachname.Text) 'erste Zahl ist Reihe
    10. xls_Appl.ActiveSheet.cells(6, 2) = (Tstrasse.Text) 'zweite Zahl ist Spalte
    11. xls_Appl.ActiveSheet.cells(7, 2) = (Tplz.Text & " " & Twohnort.Text)
    12. xls_Appl.ActiveSheet.cells(10, 4) = (Tgartennr.Text)
    13. xls_Appl.ActiveSheet.cells(13, 8) = (TRjahr.Text)
    14. xls_Appl.ActiveSheet.cells(17, 8) = (TRvereinsbeitrag.Text)
    15. xls_Appl.ActiveSheet.cells(18, 8) = (TRehevereinsbeitrag.Text)
    16. xls_Appl.ActiveSheet.cells(20, 8) = (TRbeiträgerechtschutz.Text)
    17. xls_Appl.ActiveSheet.cells(21, 8) = (TRbeiträgepartner.Text)
    18. xls_Appl.ActiveSheet.cells(23, 8) = (TRfedlaube.Text)
    19. xls_Appl.ActiveSheet.cells(24, 8) = (TRfedinhalt.Text)
    20. xls_Appl.ActiveSheet.cells(26, 8) = (TRnutzgebühr.Text)
    21. xls_Appl.ActiveSheet.cells(27, 8) = (TRpflichtstunden.Text)
    22. If Tgartennr.Text = "" Then
    23. TRstatus.Text = "*** Kein Datensatz ausgewählt ***"
    24. TRstatus.ForeColor = Color.Red
    25. Else
    26. xls_Appl.DisplayAlerts = False
    27. xls_Appl.ActiveWorkbook.SaveAs("c:\" & Tgartennr.Text & " " & Tvorname.Text & " " & Tnachname.Text & ".xlsx")
    28. xls_Appl.Application.Quit()
    29. xls_Appl = Nothing
    30. End If
    31.  
    32. End Sub


    Wäre schön wenn du mir evt. Helfen könntest... bin langsam am verzweifeln...
    Bitte VB-Tag benutzen - aber richtig Ich nehme mal an, du hast da iwas verdaddelt beim Einstellen des Code-Snippets: Oder hast du tatsächlich so viele Leerzeilen ohne Sinn in deim Code?

    zum Problem: Das hängt glaub meist damit zusammen, dass die Excel-Objekte nicht richtig freigegeben wurden. Die Freigabe von InterOp-Objekten ist eine Wissenschaft für sich - schon ein Versäumnis kann dazu führen, dass die InterOp-Anwendung nicht richtig beendet wird, sondern weiter unsichtbar im Speicher rumhängt: Excel-Interop-Objekte freigeben
    @ErfinderDesRades

    Habe eigentlich keine Leerstellen im Code....naja zu meinem Thema.
    Danke das dich so schnell gemeldet hast, allerdings verstehe ich das nicht mit dem Code?
    Habe auch mittlerweile festgestellt das , wie du schon sagtest die Excel Prozesse nicht richtig abgeschlossen werden, wie ich es im Task Manager sehen kann....
    Windows erstellt immer mehr Prozesse für xls, schliesst diese aber nicht...

    Kann du mir ein Code Beispiel zeigen, das ich das etwas besser verstehe? Wäre nett von dir.
    Dank im Vorraus
    In dem Link den er gepostet hat hast du doch nen Beispiel.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Hallo Otti,

    Ich nehme mal an das sich hinter der Variable "ExcelDateiöffnen" eine Pfad zu einer Excel Datei verbirgt ? Sollte dem so sein empfiehlt es sich (falls das nicht schon gemacht wurde :)) eine Excel- Vorlagen Datei (*.xltx ...) zu verwenden, da wenn diese geöffnet wird eine neue Datei erzeugt wird und die eigentliche Vorlage unverändert bestehen bleibt! So kann das Dokument auch nie in Bearbeitung durch einen anderen Nutzer sein ...

    Grüße
    MrNobody
    Mir fällt gerade auf... Das ist alles Strict off Programmiert oder?
    Mach mal bitte
    Option Strict ON!!!! und behebe die dann gezeigten Fehler.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Ich möchte es nochmal sagen...
    Bitte Option Strict ON programmieren.
    Schalte es an und behebe die Fehler... Die dann angezeigten Fehler löst aktuell die IDE nämlich im Hintergrund selbst auf Gutdünken und das kann zu den interessantesten und nicht nachvollziehbaren Fehlern führen.
    Zudem merkst du dann erst einmal was alles so gemacht werden muss um dein Programm lauffähig zu machen.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    ErfinderDesRades schrieb:

    ui - wenn du eine TextDatei als Datenbank bezeichnest, dann musst du wohl ganz von vorn anfangen.

    zu erlernen wäre:
    1. Grundeinstellungen
      1. Option Strict On! - dass du Datentypen unterscheidest
      2. ....


    vielleicht nochmal an diesen Schritten orientieren ;) ...
    @MemoAnMichSelbst

    Hey, habe nun "Strict On" aktiviert. Wie du sagtest bekomme ich nun einige Fehler angezeigt.
    In meinem Code werden nun die Excel Angaben als Fehler datiert.

    xls_appl.Activesheet.cells ............"Option Strict On" lässt spätes Binden nicht zu.

    Kann da nicht wirklich viel mit anfangen.

    Was ist denn damit gemeint?
    mit InterOp kenn ich mich nicht so dolle aus, weiß nur, dasses da viele leidige Probleme gibt. Wenn du die richtigen Wrapperklassen verwendest, kannst du auch da mit Strict On proggen, aber ich hatte auch schon Fälle, da waren die einfach nicht verfügbar, und da hab ich Strict Off gemacht, aber nur für das eine Modul, in dem ich mit dem Zeugs zu wursteln hatte.
    @ErfinderDesRades

    Hey. Ja sorry habe es gelesen aber komme nicht da mit klar da ich kein durchblick mehr habe und nicht weis wie ich den code bei mir einbinden soll.
    Das die Vorgehensweise die ich zur zeit habe was fürn A.... ist, ist mir nun bewusst, mein Prob ist wie ich den Code einfüge , da ich mehrere Felder in Excel und mehrer LAbel sowie TextBoxen einbinden möchte.
    ich denke, das prob ist einfach zu schwierig für dich.
    es geht hier nicht um "wissen, wie den code bei dir einbinden", sondern du müsstest die Sprache vb.net erstmal einigermaßen verstehen, und "den code" müsstest du ja erstmal selber schreiben.

    Genau genommen tut man code garnet "einbinden", man bindet Dateien ein oder Assemblies.
    Code tut man schreiben oder kopieren, und Code enthält Methoden, die tut man aufrufen.