Autor
|
Thema: Excel-Datei Importieren (1292 / mal gelesen)
|
Prinsco Mitglied
Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 29. Mai. 2020 19:23 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte eine Excel-Tabelle in mein Modell über Dateiverknüpfung mit eine Methode ausführen. ich habe die Dateiverknüpfung in dem Modell schon erstellt und weiße ich nicht wie ich diese Excel-Dateiverknüpfung über eine Methode einlesen kann. bitte kann jemanden mir helfen? ------------------ Vielen Dank im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 29. Mai. 2020 22:19 <-- editieren / zitieren --> Unities abgeben: Nur für Prinsco
Hallo Prinsco, ich vermute mal: Daten aus Excel-Datei in Tabelle zu übertragen. Eine Dateiverknüpfung ist nichts mehr, als eine Datei-Verknüpfung. Wobei mit "DateiVerknüpfung.einbetten := true" eine richtige Kopie von dieser Datei in PlantSimulation erzeugt wird. Natürlich werden dann die nachträglichen Änderungen im Original-Datei nicht mehr berücksichtigt. Mit "DateiVerknüpfung.einbetten := false" wird die Adresse in der Dateiverknüpfung unter "DateiVerknüpfung.Datename" gespeichert. Um den Excel Inhalt in Tabelle zu speichern kannst du beispielsweise: Code: DeineTabelle.leseExcelDatei(Dateiverknüpfung.Dateiname)
------- Soll sequenziel die Daten aus Excel gelesen werden, so ist die XMLSchnittstelle günstiger. Diese besitzt spezielle Methoden zum Zugriff auf Daten. ------- Generel ist das Lesen und Schreiben in Excel zeitaufwändig. Für größere Datenmengen (insbesondere zum Lesen der Daten während eines Simulationslaufes), ist die SQLite Lösung günstiger. vG Nadin
------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Prinsco Mitglied
Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 01. Jun. 2020 15:27 <-- editieren / zitieren --> Unities abgeben:
Hallo Nadin, vielen Dank für deine Antwort. mit der XLM hat es nicht geklappt. Durch diese Code: DeineTabelle.leseExcelDatei(Dateiverknüpfung.Dateiname) habe ich die Daten in Tabelle gelesen. jetzt möchte ich die Daten aus der Tabelle lesen und aus der Simulation zur Verfügung stellen. Also ich möchte mit der Methode Init die Daten aus Tabelle ausführen, weil die Daten aus Tabelle die Initial-werte der Simulation sind. Bitte wie soll ich vorgehen? was soll ich in der Methode schreiben? Im Anhang ein Bild der Tabelle Danke!
------------------ Vielen Dank im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 01. Jun. 2020 16:21 <-- editieren / zitieren --> Unities abgeben: Nur für Prinsco
Zitat: Also ich möchte mit der Methode Init die Daten aus Tabelle ausführen
das sieht aus, als dies die Werte sind, welche vor Simulation gesetzt werden sollen... Erstmal eine kleine Einführung zu Init: Init wird als erste Methode ausgeführt. Es können viele Init-Methoden existieren. Dann wird mit der Init angefangen, welche in den Untersten Netzwerk eingesetzt ist. Wenn also beispielsweise deine Init-Methode im Unternetzwerk DGM2 das Attribut Abflussrate von der Instanz Dosierofen braucht; wird es nicht den neuen Wert auslesen. Um dies zu vermeiden - also nicht mehr zu beachten, was die Intit in einzelnen Netzwerken so alles macht - werden Daten über Init in Ereignisverwalter eingelesen. Das ist die Init-Steuerung. (Diese wird tatsächlich als erste Methode ausgeführt.) Im Ereignisverwalter --> Extras --> Steuerungen bearbeiten --> Hier unter Init die Methode eintragen. Zitat: was soll ich in der Methode schreiben?
Die Information in der Tabelle folgt einer Logik; es besitzt einen Syntax und Semantik. Ich vermute mal der Tabellenausschnitt stellt die eingelesenen Daten dar. In Y-Index ist es die Instanz als String (also das was im Simulationsmodell tatsächlich eingefügt ist). Die X-Index ist das Attribut, welcher in dieser Instanz zu setzen ist. Jetzt hat ein Portionierer kein Attribut Abflussrate. In der Tabelle ist es null, was nicht verhindern, dass dieses Attribut für diese Instanz gesetzt wird. Du brauchst mindestens eine for-Schleife Beispiel mit InternalClassName: For für Y-dim --prüfe welches "internalClassName" switch str_to_obj(Tabelle[1,i]).internalClassName case "NwDePortioner" --setze Abflussrate str_to_obj(Tabelle[1,i]).setzeAttribut(Tabelle[2,0],str_to_num(Tabelle[2,i]) --setze MengeProBE ... case "..." ... end next
-------------
------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Prinsco Mitglied
Beiträge: 14 Registriert: 22.04.2020
|
erstellt am: 01. Jun. 2020 19:02 <-- editieren / zitieren --> Unities abgeben:
Hallo nadin, danke noch mal für deine schnelle Antwort. Ich habe die Code geschrieben aber funktioniert nicht. Es sagt: "Der Quellcode enthält Syntaxfehler" und ich finde nicht den Fehler. hier ist die Code: Tabelledaten.leseExcelDatei(Dateiverknüpfung.Dateiname) for local i:=1 to Tabelledaten.ydim loop --prüfe welches "internalClassName" switch str_to_obj(Tabelledaten[1,i]).internalClassName case " Schmelzofen1.Beschickung" --setze Abflussrate str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[2,1],str_to_num(Tabelledaten[2,i]) --setze MengeProBE str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[3,1],str_to_num(Tabelledaten[3,i]) case "Schmelzofen1.Portionierer" --setze Abflussrate str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[2,0],str_to_num(Tabelledaten[2,i]) -- setze MengeProBE str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[3,2],str_to_num(Tabelledaten[3,i]) case " Schmelzofen2.Beschickung" --setze Abflussrate str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[2,3],str_to_num(Tabelledaten[2,i]) -- setze MengeProBE str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[3,3],str_to_num(Tabelledaten[3,i]) case "Schmelzofen2.Portionierer" --setze Abflussrate str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[2,0],str_to_num(Tabelledaten[2,i]) -- setze MengeProBE str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[3,4],str_to_num(Tabelledaten[3,i]) case "DGM1.Entportionierer" --setze Abflussrate str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[2,5],str_to_num(Tabelledaten[2,i]) -- setze MengeProBE str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[3,5],str_to_num(Tabelledaten[3,i]) case "DGM1.Dosierofen" --setze Abflussrate str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[2,6],str_to_num(Tabelledaten[2,i]) -- setze MengeProBE str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[3,0],str_to_num(Tabelledaten[3,i]) case "DGM2.Entportionierer" --setze Abflussrate str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[2,7],str_to_num(Tabelledaten[2,i]) -- setze MengeProBE str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[3,7],str_to_num(Tabelledaten[3,i]) case "DGM2.Dosierofen" --setze Abflussrate str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[2,8],str_to_num(Tabelledaten[2,i]) -- setze MengeProBE str_to_obj(Tabelledaten[1,i]).setzeAttribut(Tabelledaten[3,0],str_to_num(Tabelledaten[3,i]) end next
------------------ Vielen Dank im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|