Geschicktes Auswerten von Abhängigkeiten innerhalb einer Excel Tabelle

  • VB.NET

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

    Geschicktes Auswerten von Abhängigkeiten innerhalb einer Excel Tabelle

    Guten Tag alle miteinander,

    Ich versuche mich gerade daran einen Konfigurator zu entwickeln, welcher seine Informationen aus hinterlegten Excel Tabellen bezieht.
    Dafür werden zu Beginn der Konfiguration wenige Parameter fest gewählt (max.3) und anschließend Felder durch Auswertung dieser gefüllt (xxx-Werte im Anhang).
    Das ganze ähnelt einer Art Baumdiagramm (siehe Text Datei im Anhang).

    Ich bin bereits in der Lage, dass durch Auswählen einer bestimmten Zeile/Spalte in Excel, die benachbarten Werte ausgewertet werden können.
    Aufgrund der Vielzahl an Möglichkeiten frage ich mich allerdings, ob es eine "elegantere" Methode gibt, als alle Fälle explizit mittels case Strukturen einzeln abzugehen?

    Ich wäre für jeglichen Ansatz dankbar und hoffe, dass ihr mir helfen könnt.


    Einige weitere Randdaten:
    Programmierumgebung: Visual Studio 2013 Ultimate
    Sprache: Visual Basic
    Persönliche Programmierkenntnisse: Grundlagen aus Schule/Literatur

    *Topic verschoben*
    Dateien
    • Bsp_Struktur.txt

      (75 Byte, 141 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    jo, die Text-Datei sieht aus wie ein Baum, 3 Ebenen tief.

    Baum-Strukturen kann man mit einem Treeview präsentieren - das ist aber recht aufwändig zu programmieren, insbesondere, wenn man Zufügen/Ändern/Löschen können will.

    Ein so einfacher Baum wie hier, wenn er genau 3 Ebenen tief ist, liesse sich auch sehr einfach mittels zweier Tabellen darstellen - da wäre Zufügen/Ändern/Löschen gleich mit drin.

    Aber was hat das mit Excel zu tun?
    Die Daten sind alle in einer Excel Tabelle hinterlegt, auf die man direkt mit Hilfe des Programms zugreift (Wird lediglich im Hintergrund geöffnet).

    Am Bsp. der Textdatei (csv. Format konnte ich nicht hochladen), sollte der allgemeine Aufbau erläutert werden.

    Da meine tatsächliche Tabelle über 80+(folgt aus Kombinationen der 3 Ebenen) Möglichkeiten verfügt, wollte ich nicht jeden einzelnen Pfad abgehen und habe gehofft, dass es diesbzgl. eine einfachere Methode gibt.

    Eine Darstellung des Baumes ist für mich nicht wichtig.
    Ich möchte nur, dass nach Eingabe der 3 für die Ebene wichtigen Parameter, die folgenden Werte ausgelesen und weiterverarbeitet werden können.

    Ich merke gerade selbst, dass mir eine genauere Präzisierung schwer fällt.
    Falls ich dir mit irgendwelchen weiteren Informationen behilflich sein kann, frag bitte nach.

    ______________________________________________________

    Vielleicht nochmal präziser:

    Muss ich alle 80+ Wege mittels Fallabfrage einzeln über Fall A-A-A, A-A-B usw. betrachten oder geht es schneller?
    Ich habe jetzt auch keine Probleme damit alle Fälle einzeln aufzuzählen. Vielleicht ist das auch vollkommen normal.
    Mir fehlen diesbezüglich halt einfach die Erfahrungswerte ;)

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

    also keinesfalls da jetzt mit einem Select Case mit 80 Cases loslegen.
    Solche Daten werden ratzfatz komplett eingelesen, und dann kannst du iwas aussuchen und iwie verarbeiten wie wolle.

    Nur hab ichs scheints noch falsch verstanden: Der Baum soll garnet angezeigt werden, und die Eingaben sind iwie gemeint als eine Art "Suchkriterium"?

    Wär glaub echt gut, wenn du die csv anhüngest, also wenn du sie zippst, kannst du sie bestimmt anhängen.
    Suchkriterium trifft das sehr genau.
    Der Nutzer soll 3 Parameter eingeben und abhängig von diesen bestimmte Informationen erhalten.
    Die 3 Parameter werden in meinem Programm über Dropdown Felder ausgewählt (Diese werden zu Beginn mit den Infos aus der Tabelle gefüllt), hier also folgt für die...
    ...Combobox1 : A,B
    ...Combobox2: i,j
    ...Combobox3: x,y

    Nun soll durch Klicken eines Buttons die Comboboxen ausgewertet werden und diversere Textboxen gefüllt werden.

    Bsp.:
    Nutzer A wählt: Parameter 1 = A, Parameter 2 = i, Parameter 3 = y
    Es folgt daraus: Textbox1 gibt als Durchmesser = 3 aus, Textbox2 die Länge = 30 aus usw.

    Im Anhang findet sich eine exemplarische Tabelle.
    Dateien
    • Bsp_Tabelle.zip

      (7,37 kB, 89 mal heruntergeladen, zuletzt: )
    ...
    Habe ich an dieser Stelle eingefügt, um nicht jeden einzelnen Durchmesser-,Länge-,Gewicht-Eintrag füllen zu müssen.

    ...weitere Parameter woanders
    soll nur zeigen, dass nach A und B auch noch C,D.... folgen.
    Meine tatsächliche Tabelle kann ich an dieser Stelle leider nicht hochladen, da ich eine Veröffentlichung der Daten vermeiden will.
    Die abstrakte Form ist aber genau der Struktur der eigentlichen Tabelle nachempfunden und sollte daher keinen Informationsverlust verursachen.

    Ich habe an dieser Stelle das xlsx Format gewählt, da es der Übersicht geholfen hat (Verschmelzen mehrerer Zellen), was leider im csv Format nicht möglich ist.
    Da ich die Datei aber auch als csv Datei abspeichern kann, lade ich diese gerne ebenfalls hoch (mit ausgefüllten Werten) und ohne ... oder Ähnlichem.

    Vielen Dank für deine Geduld!
    Dateien
    also ich hab mal Tabs eingefügt

    Quellcode

    1. Wähle Parameter Nr.1;Wähle Parameter Nr.2;Wähle Parameter Nr.3;Durchmesser;Länge;Gewicht
    2. A ;i ;x ;5 ;50 ;10
    3. ; ;y ;3 ;30 ;37
    4. ;j ;x ;4 ;8 ;21
    5. ; ;y ;5 ;9 ;22
    6. B ;i ;x ;6 ;10 ;23
    7. ; ;y ;7 ;11 ;24
    8. ;j ;x ;8 ;12 ;25
    9. ; ;y ;9 ;13 ;26
    10. ; ; ; ; ;
    11. ; ; ; ; ;
    12. ; ; ; ; ;
    13. ; ; ; ; ;

    Die Systematik ist so ziemlich klar, nur in dieser Form schlecht zu verarbeiten.
    Die Leerzeilen am Ende sollte man löschen, und die Leerstellen innerhalb der Tabelle auffüllen - lässt sich zur Not auch automatisch machen.
    Und dann hat man eiglich eine einfache Lookup-Tabelle, wo man mit 3 Suchbegriffen recht sicher zugreifen kann.

    Willst du daran auch Änderungen vornehmen, und zurückspeichern? Weil man muss es wie gesagt aufarbeiten, aber wenn mans auch wieder abspeichern muss, dann muss man die Aufarbeitungen ja wieder zurückbauen - ziemlich lästig.

    Am Einfachsten wäre, wenn die Csv alle Felder gleich richtig ausgefüllt hätte.
    Änderungen sollen nicht vorgenommen werden und ein Abspeichern ist auch nicht geplant.
    Der Begriff Lookup-Tabelle klingt an dieser Stelle interessant (Vorher noch nie gehört..).
    Ich werde mich diesbezüglich mal schlau machen und gucke, was ich damit alles so anfangen kann.

    Die csv. Datei kann ich notfalls auch manuell ausfüllen. Was solch stumpfe Fleißarbeit angeht, bin ich relativ schmerzfrei :P

    Ich melde mich dann, sobald ich diesbezüglich etwas mehr weiß.
    Danke!
    Ich nochmal ..
    Ich habe mich jetzt soweit in deinem Programm zurechtgefunden, dass ich einzelne Passagen super an mein eigenes Projekt anpassen konnte.
    Allerdings verstehe/finde ich eine Funktion nicht.
    An welcher Stelle füllst du die Textboxen?

    Ich als Laie dachte, dass dies innerhalb von
    ComboBox_SelectedIndexChanged(...) geschehen müsste.
    Da ich allerdings weder dort noch im ganzen Projekt einen Eintrag der Form (exemplarisch für den Durchmesser) DurchmesserTextBox = x finden konnte, stehe ich diesbezüglich etwas auf dem Schlauch.
    hu - bin ich froh, dass du fragst, anders wärs eher für die Katz gewesen :thumbsup:

    Die Anwendung ist auf dem Databinding-Grund-Konzept aufgebaut - da befüllt man keine Controls, sondern man bindet sie, und zwar (in diesem Fall) an ein typisiertes Dataset. Diese Bindings kann man ganz einfach im Form-Designer erstellen - dazu braucht man keinen Befüll-Code zu schreiben.
    Dass es überhaupt Code zum "Befüllen" der Comboboxen gibt liegt daran, dass ich das Datenmodell möglichst primitiv gehalten hab (nur eine Tabelle).
    Bei einer saubereren Modellierung hätte ich auch die Combos im Designer konfigurieren können, da wären evtl. nur 15 Zeilen Code insgesamt übrig geblieben.

    Ich denke, um zu verstehen, was ich gemacht hab, solltest du das Video "DetailView" auf vier Views-Videos angucken. Die anderen Videos auch, aber wie ich mir speziell die Textboxen hab generieren lassen wird in "DetailView" gezeigt.

    Also wenn du programmieren lernen willst, dann ist das jetzt ein guter Einstieg, weil du hast das Ziel nicht nur vor Augen, sondern in Händen, und den Weg dahin, ist "nur noch" fehlende Glieder einer Kette - aber das musste dir halt noch erarbeiten. Sollte aber nun viel leichter sein, als wenn du wenn dir nur sehr vage ein Ziel vor Augen stünde.

    Ein kompletteres "Lernpensum" habich mal hier zusammengestellt: Datenverarbeitungs-Vorraussetzungen

    Sieht zT mehr aus, als es ist, einiges lernt sich wie von selbst (anderes aber nicht). Wenn dir das insgesamt zu viel ist, dann kannstes Proggen auch aufstecken, denn wer programmieren lernt, der lernt, was da steht, ob nun zielstrebig, oder eher zufällig oder gar widerwillig (solche Leuts sind meist nur am fluchen, aber am Ende berücksichtigen sie zB verschiedene Datentypen so gut wie jeder andere ;) )

    (hmm - was mich nun doch wundert ist, warum wundert dich nur, wie ich die Textboxen befüllt habe? Wieso wundert dich nicht ebenso, dass das DatagridView Daten anzeigt?)

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

    Dann werde ich mich mal durch deine Tutorials durcharbeiten ;)

    Mich wundern in deinem Programm natürlich noch einige weitere Aspekte, wie der Import von ParamLookup.ParamDts, das feste Einbinden der Tabelle und noch einige andere Aspekte.
    Allerdings bin ich mir bei letzterem zum Beispiel absolut sicher, dass ich sowas durch eigene Recherche herausfinden kann und deshalb hier nicht nachfragen muss.

    Nach dem DatagridView Daten haben ich an dieser Stelle auch nicht gefragt, da ich mir das vllt. nach dem beantworten der Textbox Frage selber herleiten kann.

    Ich bin eher der Typ der bei solch einem Projekt eine Baustelle nach der anderen abarbeitet.
    Deshalb freut es mich auch sehr, dass du mir durch die Weiterleitung zu Tutorials die "Hilfe zur Selbsthilfe" ermöglichst!

    Ich setze mich da jetzt auch gleich mal dran :)
    Geschafft!
    Nachdem ich mich die letzten Tage mit deinen Videos und diversen Forumseinträgen, der MSDN-Bibliothek und dem Objektkatalog (Wusste bis dato nicht, dass es sowas praktisches gibt...) auseinandergesetzt habe und nebenbei feststellte, dass ich so ziemlich jeden deiner sogenannten Kardinalfehler begangen habe, konnte ich mein Projekt endlich mit der gewünschten Funktionalität erweitern.

    Ich musste zwar alles nochmal neu überarbeiten, dafür läuft es jetzt aber auch schön schnell und ich muss mich nicht mehr durch einzelne Excel Zellen durchquälen.

    Als nächstes werde ich versuchen, das ganze für Fließkommazahlen zu erzeugen und bin (noch) guter Dinge, dass das hinhaut ;)

    Ich möchte mich an dieser Stelle noch einmal ganz herzlich bei dir bedanken! Du hast mir wirklich sehr weitergeholfen :)
    erstmal Backup machen, und dann im typDataset den Datentyp ändern.
    Dadurch entstehen dann ein paar Folgefehler, die gilt es zu korrigieren, und das sollte es auch schon sein.

    Wenn Lust hast, kannste dein Teil auch mal zippen und anhängen (aber ohne die bin, obj - Ordner).
    Wenn ich da reingucke, finde ich bestimmt noch eine ganze Menge ;)