| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Excel Befehle über Lisp steuern (1459 mal gelesen)
|
kurt.trattner Mitglied Mechanical Plant Engineer
Beiträge: 46 Registriert: 28.05.2014 AutoCAD Mechanical 2012
|
erstellt am: 26. Aug. 2014 10:04 <-- editieren / zitieren --> Unities abgeben:
Hallo. Ich habe eine kurze Frage. Kennt ihr eine gute Anleitung, die beschreibt wie man aus Lisp heraus Excel Befehle steuert. Formatierungen erzeugen klappt schon ganz gut. Aber wenn es um kompliziertere Befehle wie "Replace" geht blicke ich nicht mehr durch. Ich finde im Netz zwar die VBA Befehle. Aber leider habe ich noch keine Anleitung gefunden, die zeigt wie man diese in Lisp aufrufen kann. Das müsste doch immer mit diesen vlax Befehlen möglich sein. So mache ich zumindest die Formatierungen. Ich bedanke mich schon einmal für Tipps. Lg. Kurt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 26. Aug. 2014 11:37 <-- editieren / zitieren --> Unities abgeben: Nur für kurt.trattner
Wenn du etwas genauer beschreiben könntest, was du vor hast, und evtl auch mal etwas von dem Programmcode um den es dir geht, postest, fällt dem Anderen es sicher leichter dir auf deine Frage zu antworten. (vlax-put-property ExcelCells "ITEM" zeile spaltet Text) schreibt z.b. in eine Excelzelle einen text hinein ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kurt.trattner Mitglied Mechanical Plant Engineer
Beiträge: 46 Registriert: 28.05.2014 AutoCAD Mechanical 2012
|
erstellt am: 26. Aug. 2014 11:45 <-- editieren / zitieren --> Unities abgeben:
Mir ging es zunächst allgemein um das Verständnis wie das funktioniert. Aber um konkret zu werden. Ich habe Attributnamen die in ein Excel Dokument exportiert werden (ausgelesen aus ACAD) Diese haben wenn sie aus zwei Wörtern bestehen statt einem Leerzeichen ein "_" als Trennzeichen. Ich möchte nun im Excel das selbe über Lisp aufrufen wie wenn man händisch ' STRG+F -> Replace -> Find What "_" -> Replace With " " -> Replace All ' ausführt. Ich habe im Netz einen VBA Code gefunden, der das könnte aber leider weiß ich nicht wie ich vom VBA Code auf einen ActiveX Code komme. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 26. Aug. 2014 12:22 <-- editieren / zitieren --> Unities abgeben: Nur für kurt.trattner
naja, du kannst doch nicht aus Acad die volle Funktionalitäten von Excel steuern. Aber du kannst ja das Makro, welches du gefunden hast ausführen lassen. Dürfte irgendwie so gehen: (vlax-invoke-method excel "Macroname") oder so: (vlax-invoke-method excel "Run"(strcat (vl-filename-base xlpath) ".xls!Macroname")) ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kurt.trattner Mitglied Mechanical Plant Engineer
Beiträge: 46 Registriert: 28.05.2014 AutoCAD Mechanical 2012
|
erstellt am: 26. Aug. 2014 13:16 <-- editieren / zitieren --> Unities abgeben:
Wir wollen das ganze mit so wenig Zusatzmakros wie möglich umsetzen. Und bevor wir für das ein Makro einbauen sollen die User das händisch machen. Es wäre einfach ein "nice to have" Feature gewesen, wenn das automatisch passiert. Aber mir ging es eigentlich nicht um das Problem im speziellen. Ich suche eine allgemeine Anleitung darüber wie man Excel per ActiveX ansteuert mit Visual Lisp. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 222 Registriert: 22.08.2006
|
erstellt am: 26. Aug. 2014 17:32 <-- editieren / zitieren --> Unities abgeben: Nur für kurt.trattner
|
kurt.trattner Mitglied Mechanical Plant Engineer
Beiträge: 46 Registriert: 28.05.2014 AutoCAD Mechanical 2012
|
erstellt am: 27. Aug. 2014 06:55 <-- editieren / zitieren --> Unities abgeben:
Die Namen kommen aus einer Assoziationsliste. Sie stellen immer den ersten Teil dar. Formatiere ich sie bereits im Lisp um bleiben die unteren Spalten leer, da die Zuordnung nicht mehr passt. Die Namen werden immer mit dem ersten Teil der Assoziationsliste verglichen. Passen die zwei Werte zusammen, wird der Attributwert in dieser Spalte ausgegeben. Und ich wüsste nicht wie ich die Namen auch in der Assoziationsliste bearbeiten könnte. Auch wenn das gehen würde müsste ich den umgekehrten Weg wieder in mein Importtool einbauen. Damit die Namen wieder mit Attribut Tags zusammenpassen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 27. Aug. 2014 07:53 <-- editieren / zitieren --> Unities abgeben: Nur für kurt.trattner
So ganz habe ich das Bild noch nicht zusammen, aber was soll's. Du mußt doch keine Liste ändern, lediglich den an schreib-mir-inExcelzell-Wert ... Aber da es dir leicht fallen wird, bitte nochmal: In Acad Blockreferenzen und Attribute, dann werden die in eine Excel"Vorlage" ei gefügt in denen die erwarteten Attributtags schon drin stehen oder wie genau ?? Thx ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 222 Registriert: 22.08.2006
|
erstellt am: 27. Aug. 2014 07:59 <-- editieren / zitieren --> Unities abgeben: Nur für kurt.trattner
du musst die werte auch nicht in der assoc-list bearbeiten, du kannst fuer den export und import mit hilfe von vl-string-translate die namen konvertieren. wenn die namen in der assoc-list symbole (also keine strings) sein sollten vorher noch mittels vl-princ-to-string in string umwandeln gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 27. Aug. 2014 10:38 <-- editieren / zitieren --> Unities abgeben: Nur für kurt.trattner
Hallo also wenn Excel die Arbeit machen soll dann versuche es so. Code: (defun c:ZeichenTausch (/) (setq Exappli (vlax-get-object "excel.application")) (setq ACWB (vlax-get-property Exappli "ActiveWorkbook")) (setq ACSheet (vlax-get-property ACWB "ACTIVESHEET")) (setq xlURange (vlax-get-property ACSheet "UsedRange")) (vlax-invoke-method xlURange 'Replace "_" " " 2) )
------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kurt.trattner Mitglied Mechanical Plant Engineer
Beiträge: 46 Registriert: 28.05.2014 AutoCAD Mechanical 2012
|
erstellt am: 27. Aug. 2014 15:41 <-- editieren / zitieren --> Unities abgeben:
Danke Wolfgang du bist der Beste! Genau diese Zeile hat mir gefehlt: Code: (vlax-invoke-method HeaderRange 'Replace "_" " " 2)
Der Rest war schon für die Formatierung vorhanden. Wo hast du gelernt wie man die Befehle von Excel in Lisp anwendet? Mich würde so eine Anleitung wirklich sehr interessieren. Lg. Kurt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 28. Aug. 2014 08:53 <-- editieren / zitieren --> Unities abgeben: Nur für kurt.trattner
Hallo, Also erstmals zu der Replace Zeile die 2 am ende kannst du weglassen ist wahrscheinlich von den "" ohne Shift stehengeblieben aber es schien ja trotzdem zu funktionieren. Ansonsten findest du soweit alles in der Hilfe des eigentlichen Programms in dem fall Excel. oder einfach googeln z.B. vba Excel replace . Da findest du dann ziemlich schnell was und in welcher Reihenfolge du welche Sachen du an Replace übergeben musst. Zum anderen hilft dir vlax-dump-object hier darfst du nur das T am ende nicht vergessen denn dieses zeigt dir an welche Methoden anwendbar sind diese stehen dann immer ganz unten. z.B. (vlax-dump-object xlURange t). Daher viel probieren wenn du einmal verstanden hast wie das Gerüst aufgebaut ist kommt man da ziemlich schnell durch. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 28. Aug. 2014 08:53 <-- editieren / zitieren --> Unities abgeben: Nur für kurt.trattner
|