| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| PLM TechnologieForum Essen |
Autor
|
Thema: Werte aus Excel einlesen über mehrere Dateien (2198 mal gelesen)
|
flying12 Mitglied
Beiträge: 113 Registriert: 10.05.2007 SW 2018 Pro SP5
|
erstellt am: 10. Apr. 2014 07:19 <-- editieren / zitieren --> Unities abgeben:
Hi Leutz, ein Makro soll mir 5 Kurven aus Excel in Solid einlesen (feature: Kurve durch XYZ-Punkte, welche ich in 5 Textdateien gespeichert habe). Wenn ich das Makro hinterher bearbeite fällt auf, dass er sich nicht die .txt-Dateien merkt, sondern die darin enthaltenen Punkte. Diese ändere ich aber ab und zu in der Excel Tabelle, sodass sie sich im Makro nicht ändern würden. Weiß jemand wie man die einzelnen Dateien immer wieder neu auslesen lassen kann? Schönen Gruß flying ------------------ Grüße flying Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 10. Apr. 2014 09:53 <-- editieren / zitieren --> Unities abgeben: Nur für flying12
Hallo flying, hast du schon mal ModelDoc2::InsertCurveFile probiert, das klingt für mich so, also sollte es das machen. Allerdings wird auch das keine externe Referenz zu dein(en) Ecxeldatei(en) aufbauen, vermutlich wirst du die Kurve anschließend wegschmießen und neu einfügen müssen. Ob sich das mit deiner Konstruktion realisieren lässt weiß ich natürlich nicht. Alternativ dazu liest du selbst in deinem Makro die Textdateie aus und erzeugst die mit ModelDoc2::InsertCurveFileBegin, ModelDoc2::InsertCurveFilePoint und ModelDoc2::InsertCurveFileEnd selbst. Ich hoffe, dass gibt dir den Anstoß in eine gangbare Richtung, probiert hab ich das alles nicht. Ciao, Stefan
------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flying12 Mitglied
Beiträge: 113 Registriert: 10.05.2007 SW 2018 Pro SP5
|
erstellt am: 14. Apr. 2014 11:59 <-- editieren / zitieren --> Unities abgeben:
Hi Stefan, ModelDoc2::InsertCurveFile klingt an und für sich sehr gut. Leider habe ich dazu online keine Hinweise gefunden, wie man daraus jetzt ein Makro macht. Bisher sieht das bei mir so aus:
Code:
Dim swApp As ObjectDim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = _ Application.SldWorks Set Part = swApp.ActiveDoc Part.InsertCurveFileBegin boolstatus = Part.InsertCurveFilePoint(0.03, 0, 0) ... boolstatus = Part.InsertCurveFileEnd() Part.InsertCurveFileBegin boolstatus = Part.InsertCurveFilePoint(0.04, 0, 0) boolstatus = Part.InsertCurveFilePoint(0.0369551813, 0.01530733729, -0.000078125) usw.)
------------------ Grüße flying Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flying12 Mitglied
Beiträge: 113 Registriert: 10.05.2007 SW 2018 Pro SP5
|
erstellt am: 16. Apr. 2014 09:30 <-- editieren / zitieren --> Unities abgeben:
|
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 16. Apr. 2014 10:47 <-- editieren / zitieren --> Unities abgeben: Nur für flying12
Hallo Flying, du musst der Methode InsertCurveFile als Parameter die Text-Datei übergeben. Z.B. boolstatus = Part.InsertCurveFile(C:\temp\test.txt) In test.txt führst du pro Zeile die Koordinaten eines Punktes auf. Laut API-Hilfe sind Kommas, Leerzeichen oder Tabs zwischen den drei Werten erlaubt. Ist allerdings die Hilfe von SWX 2014, aber das sollte trotzdem passen ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flying12 Mitglied
Beiträge: 113 Registriert: 10.05.2007 SW 2018 Pro SP5
|
erstellt am: 16. Apr. 2014 15:06 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas, so in etwa? Gibt bei mir aber noch einen Fehler aus: Fehler beim Kompilieren. Erwartet Listentrennzeichen oder) Code: Dim swApp As ObjectDim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = _ Application.SldWorks Set Part = swApp.ActiveDoc boolstatus = Part.InsertCurveFileBegin(U:\tests\kurve.txt) boolstatus = Part.InsertCurveFileEnd() End Sub
Was ist mit dem "ModelDoc2::"-Teil, den Stefan erwähnt hatte? ------------------ Grüße flying Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003
|
erstellt am: 16. Apr. 2014 19:46 <-- editieren / zitieren --> Unities abgeben: Nur für flying12
Hallo Flying, Zitat: Original erstellt von flying12: ...
Code:
boolstatus = Part.InsertCurveFileBegin(U:\tests\kurve.txt)boolstatus = Part.InsertCurveFileEnd()
Was ist mit dem "ModelDoc2::"-Teil, den Stefan erwähnt hatte?
die Methode heißt nur InsertCurveFile, das angehängte Begin bzw. End existiert nicht- ModelDoc2 ist das Object, das du mit Dim Part as Object verwendest. Kleiner Tipp: Schau dir mal in den Lehrbüchern von SWX das Buch zum Thema API an. Und unter http://solidworks.cad.de/mm_boerse05.htm findest du unter der Nr. 42 eine weitere Hilfe. ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flying12 Mitglied
Beiträge: 113 Registriert: 10.05.2007 SW 2018 Pro SP5
|
erstellt am: 17. Apr. 2014 07:51 <-- editieren / zitieren --> Unities abgeben:
Hi Andreas, danke für die Lesetipps. Habe angefangen die Nr 42 zu lesen. Komme da aber schon auf Seite 16 ins stocken (einfügen von Button und Label). Habe absolut keine VB-Grundkenntnisse, und werde mich wohl - zumindest in diesem Jahr - nicht mehr darin einlesen. Hatte es kurz überlegt, aber es wird einfach zuviel. Derzeit lese ich mich in Excel bzw. tiefergehende Funktionen ein. Wenn es dann mit dem einlesen der Kurven nicht klappt, dann muss ich eben damit leben. Aber wenn ich eines Tages mit VB und API anfangen sollte, werde ich mich an deinen Link erinnern . Danke! ------------------ Grüße flying Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flying12 Mitglied
Beiträge: 113 Registriert: 10.05.2007 SW 2018 Pro SP5
|
erstellt am: 17. Apr. 2014 09:50 <-- editieren / zitieren --> Unities abgeben:
Habe jetzt in diesem Thread noch diesen Code gefunden: Code: Sub main() Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean ' an SolidWorks anhängen Set swApp = Application.SldWorks ' aktives Modell holen Set Part = swApp.ActiveDoc ' und nacheinander die Kurvendateien einlesen boolstatus = Part.InsertCurveFile("c:\temp\kurve-params-01.txt") boolstatus = Part.InsertCurveFile("c:\temp\kurve-params-02.txt") boolstatus = Part.InsertCurveFile("c:\temp\kurve-params-03.txt") ' usw.End Sub
Sieht vielversprechend aus, allerdings passiert bei mir im SW nichts. Die Pfade hatte ich natürlich angepasst. edit: jetzt gehts doch! Hatte da tatsächlich nochn Tippfehler drin. Vielen Dank an Stefan Berlitz und dir ANdreas! ------------------ Grüße flying [Diese Nachricht wurde von flying12 am 17. Apr. 2014 editiert.] [Diese Nachricht wurde von flying12 am 17. Apr. 2014 editiert.] [Diese Nachricht wurde von flying12 am 17. Apr. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 17. Apr. 2014 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für flying12
Hallo flying also bei mir klappt es mit dem folgenden code im Anhang das Makro und meine "Kurven-Dateien" Vielleicht liegt es am Format der txt-Dateien? Als Dezimalzeichen muss ein Punkt und kein Komma verwendet werden und meine xyz Werte hab ich mit TAB getrennt. Sub main() Dim swapp As SldWorks.SldWorks Dim doc As ModelDoc2 Set swapp = Application.SldWorks Set doc = swapp.ActiveDoc ok = doc.InsertCurveFile("C:\Temp\c1.txt") ok = doc.InsertCurveFile("C:\Temp\c2.txt") End Sub
------------------ Grüße Heinz PS kannst ev. eine Deiner Kurvendateien posten? [Diese Nachricht wurde von nahe am 17. Apr. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flying12 Mitglied
Beiträge: 113 Registriert: 10.05.2007 SW 2018 Pro SP5
|
erstellt am: 17. Apr. 2014 10:23 <-- editieren / zitieren --> Unities abgeben:
|