| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Excelzelle auslesen (3246 mal gelesen)
|
kist Mitglied
Beiträge: 78 Registriert: 20.01.2005 Acad 2010 Windows XP SP3
|
erstellt am: 31. Aug. 2006 09:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Acad2007 / Windows2000 prof kann mir jemand sagen was hier nicht stimmt ? die "fette" Zeile gibt den Fehler Fehler: ActiveX-Server gab folgenden Fehler zurück: unbekannter Name: zurück der Pfad stimmt, Ich habe auch mit / und // probiert Code: (setq excel (vlax-get-object "excel.application") ExcelWorkbook (if excel (vlax-get-property excel "C:\\pfad\\pfad\\excelfile.xls")) ExcelSheet (if ExcelWorkbook (vlax-get-property ExcelWorkbook "excelfile.xls")) ExcelCells (if ExcelSheet (vlax-get-property ExcelSheet "Tabelle1")) ) (SETQ A (vlax-get-property ExcelCells "1A"))
oder bin ich damit überhaupt auf dem Holzweg ?
------------------ schöne Grüsse [Diese Nachricht wurde von kist am 31. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 31. Aug. 2006 10:26 <-- editieren / zitieren --> Unities abgeben: Nur für kist
Hallo, schau dir doch nochmal die Syntax des vlax-get-property an. Du hast gar keine Eigenschaft angegeben, die du ausgelesen haben möchtest und irgendwelche Parameter, wie bei dir der dateiname, haben im vlax-get-property nichts verloren. Suche mal hier im Forum, das Thema ist schon öfter dran gewesen und auch beantwortet worden. Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Ich bin dabei: CAD.de Anwendertreffen vom. 20. - 22.09.2006 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 01. Sep. 2006 08:34 <-- editieren / zitieren --> Unities abgeben: Nur für kist
Hallo Kist, versuch mal das (verwende ich auch so): (if (setq excel (vlax-get-object "excel.application")) (progn (setq ExcelWorkbook (if excel (vlax-get-property excel "ActiveWorkbook" ) ) ExcelSheet (if ExcelWorkbook (vlax-get-property ExcelWorkbook "ACTIVESHEET" ) ) ExcelCells (if ExcelSheet (vlax-get-property ExcelSheet "CELLS" ) ) ) ) (alert "Excel nicht gefunden") ) Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kist Mitglied
Beiträge: 78 Registriert: 20.01.2005 Acad 2010 Windows XP SP3
|
erstellt am: 07. Sep. 2006 10:08 <-- editieren / zitieren --> Unities abgeben:
Feedback meine Lösung Code: (setq excel (vlax-get-object "excel.application") ExcelWorkbook (if excel (vlax-get-property excel "ActiveWorkbook")) ExcelSheet (if ExcelWorkbook(vlax-get-property ExcelWorkbook "ACTIVESHEET")) ExcelCells (if ExcelSheet(vlax-get-property ExcelSheet "CELLS")) )(vlax-put-property ExcelCells "item" 2 2 zahl) ;SCHREIBT IN Zelle B2 (setq Excelzelle (vlax-variant-value (vlax-get-property ExcelCells "item" 1 1))) ;Zelle A1 (setq Wert (fix (vlax-variant-value (vlax-get-property Excelzelle "Value")))) ;Holt Wert aus Zelle A1 WERT
------------------ schöne Grüsse Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
OliCAD92 Mitglied Konstrukteur (Bauunternehmen, Tiefbau)
Beiträge: 45 Registriert: 04.06.2018 Windows 7 Enterprise 64 Bit Intel Core i7-6700 32,0 GB DDR4 nVidia Quadro K2200 Autodesk AutoCAD Architecture 2017 Autodesk AutoCAD Architecture 2018
|
erstellt am: 26. Sep. 2018 16:09 <-- editieren / zitieren --> Unities abgeben: Nur für kist
Zitat: Original erstellt von OliCAD92: ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!cadffm hat mich auf diesen Beitrag verwiesen, da ich ein ähnliches Problem/eine ähnliche Frage habe. https://ww3.cad.de/foren/ubb/Forum54/HTML/034093.shtml Könnte mir jemand diese Lösung mal ein wenig erläutern? Welche Variable enthält den Zelleninhalt? "Wert"? Wofür steht:
Code:
setq excel (vlax-get-object "excel.application") ExcelWorkbook (if excel (vlax-get-property excel "ActiveWorkbook")) ExcelSheet (if ExcelWorkbook(vlax-get-property ExcelWorkbook "ACTIVESHEET")) ExcelCells (if ExcelSheet(vlax-get-property ExcelSheet "CELLS")) )
Warum "SCHREIBT IN Zelle B2" und was schreibt das Script in Zelle B2?
Code:
(vlax-put-property ExcelCells "item" 2 2 zahl) ;SCHREIBT IN Zelle B2
Und was heißt das?
Code:
(setq Excelzelle (vlax-variant-value (vlax-get-property ExcelCells "item" 1 1))) ;Zelle A1 (setq Wert (fix (vlax-variant-value (vlax-get-property Excelzelle "Value")))) ;Holt Wert aus Zelle A1 WERT
Bräuchte mal eine Erkärung zu dem Syntax der einzelnen Bestandteile des Scripts.. x.x Habe schon versucht in Google etwas zu finden, aber bei den ganzen Autodesk-Seiten bekomme ich immer die Meldung "Page not found", warum auch immer Google sich dann darauf verlinkt...
EDIT Okay, habe wohl zu schnell verzweifelt Code:
setq excel (vlax-get-object "excel.application")
Schaut nach ob eine Excel-Tabelle offen ist, wenn, dann teilt es die ObjektID der Variablen "excel" zu, wenn keine Excel-Tabelle offen ist, bekommt "excel" nil als Wert Code:
ExcelWorkbook (if excel (vlax-get-property excel "ActiveWorkbook"))
Syntax von if: (if DasHierWahr DannTueDas) Also setzt er die Variable "ExcelWorkbook" auf die ID der aktiven Arbeitsmappe if ExcelWahr Dann_Gib_Mir_Die_ID_Von_Der_Aktiven_Arbeitsmappe Anscheinend reicht es der if Funktion aus, wenn es nicht gleich nil ist, heißt Excel ist nicht nil, weil es die ID von Excel hat... so verstehe ich es verwirrend
Code:
ExcelSheet (if ExcelWorkbook(vlax-get-property ExcelWorkbook "ACTIVESHEET")) ExcelCells (if ExcelSheet(vlax-get-property ExcelSheet "CELLS")) )
Macht quassi das selbe wie die darüber... Code:
(vlax-put-property ExcelCells "item" 2 2 zahl) ;SCHREIBT IN Zelle B2
Schreibt in Zelle B2 ( 2 2 ) den Wert von "zahl", was ""item"" macht, habe ich noch nicht verstanden Der Teil des Codes scheint mir aber einfach mit rein gerutscht zu sein, beim kopieren und nicht nötig für das aus Excel herausnehmen/herauslesen zu sein. Das eigentliche herauslesen beginnt nun Code:
(setq Excelzelle (vlax-variant-value (vlax-get-property ExcelCells "item" 1 1)))
Hier wird die Zelle aktiviert, bzw markiert. Zelle A1, dafür steht 1 1, die Übertragung der Spalte wird wohl nicht als A, B, C, etc. getätigt, sondern als Zahl, dabei ist 1 = A, 2 = B usw. Code:
(setq Wert (fix (vlax-variant-value (vlax-get-property Excelzelle "Value"))))
Nun wird der Wert (Muss eine Zahl sein??? kann man auch einen String aus der Zelle holen?) aus der vorher markierten Zelle genommen. Bisher habe ich also den Code relativ klar für mich gemacht, nun ist meine Frage..
Kann man auch "Wörter" aus der Zelle holen, bei meinem Versuch kam immer "Fehlerhafter Argumenttyp: numberp: "Layer1"". Ich möchte mit dem Script Layer an und aus schalten, die in der Excel-Tabelle stehen, bzw. nicht stehen. Daher wäre es praktisch auch "Wörter" aus der Zelle entnehmen zu können und nicht nur Zahlen, sonst müsste ich ein Haufen von Zahlen als Namen für die Layer benutzen... Entschuldigung für den ewig langen Text [Diese Nachricht wurde von OliCAD92 am 26. Sep. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 26. Sep. 2018 17:04 <-- editieren / zitieren --> Unities abgeben: Nur für kist
|
OliCAD92 Mitglied Konstrukteur (Bauunternehmen, Tiefbau)
Beiträge: 45 Registriert: 04.06.2018 Windows 7 Enterprise 64 Bit Intel Core i7-6700 32,0 GB DDR4 nVidia Quadro K2200 Autodesk AutoCAD Architecture 2017 Autodesk AutoCAD Architecture 2018
|
erstellt am: 26. Sep. 2018 17:17 <-- editieren / zitieren --> Unities abgeben: Nur für kist
Zitat: Original erstellt von cadffm: Da sich kirst seit dem 30. Sep. 2013, 12:06 nicht mehr zeigte:[i]>Welche Variable enthält den Zelleninhalt? "Wert"? JA >Wofür steht.. Hole das Objekt der excel-Applikation Hole die aktuelle Exceldatei (der Applikation) Hole die aktuelle Tabelle (der aktuellen Exceldatei) Hole die Zellen (der aktuelle Tabelle) >Warum "SCHREIBT IN Zelle B2" und was schreibt das Script in Zelle B2? Weil der Programmierer es wollte und Autodesk vlax-put-property dazu verdonnert hat Eigenschaften zu ändern, es wird geschrieben was als Wert übergeben wird. In dieser Zeile steht nur eine Variable [ZAHL], was auch immer diese Variable für einen Wert trägt, dieser wird geschrieben.
<aber hier stoppe ich mal und verweise auf>
Das generelle Nachschlagewert der Doku/AutoDesk https://help.autodesk.com/view/OARX/2019/ENU/?guid=GUID-36BF58F3-537D-4B59-BEFE-2D0FEF5A4443 sicher im deutschsprachigen eine sehr gute und schnelle VLisp/ActiveX-Einstiegsseite, zu der man auch kommt wenn man bei Null anfängt mit AutoLisp. http://www.activex.autolisp.info/ ansonsten Seiten wie diese: https://www.afralisp.net/visual-lisp/tutorials/ Und speziell für das Excel ObjektModell https://docs.microsoft.com/de-de/visualstudio/vsto/excel-object-model-overview?view=vs-2017 vermutlich findet man aber die gewöhnlichen Dinge schneller in einem Excel-VBA Forum (als Suchmaschinen-Treffer) Neben der allgemeinen Doku zu Objekten und Methoden hilft VLAX-DUMP-OBJECT häufig auf die Sprünge.[/i]
Super! habe in der Zeit frecherweise meinen Beitrag komplett überarbeitet, da sich mein Hirn doch für 10 Minuten mal angeschalten hat -.- sorry. Das einzige was mir gerade unschlüssig ist, ist ob man auch Wörter aus den Zellen holen kann oder ob es immer Zahlen sein müssen.. EDIT Hirn war wieder aus und hat den Beitrag mitten in das Zitat geschrieben ------------------ Liebe Grüße,
Oli [Diese Nachricht wurde von OliCAD92 am 26. Sep. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 26. Sep. 2018 17:27 <-- editieren / zitieren --> Unities abgeben: Nur für kist
Man holt aus den Zellen was man möchte bzw. die Eigenschaftenwerte die so eine Zelle eben hat, unabhängig von dem Thema hier sollte dir bekannt sein: Excel ist nicht so einfach. Eine Zelle kann als Text oder als Zahl oder als Dateum formatiert sein, in einer als Text formatierten Zelle kann jeder beliebige Text stehen. Wie auch immer, MACHE erst mal, die Probleme kommen von ganz alleine - Vorher sucher = Zwecklos Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OliCAD92 Mitglied Konstrukteur (Bauunternehmen, Tiefbau)
Beiträge: 45 Registriert: 04.06.2018 Windows 7 Enterprise 64 Bit Intel Core i7-6700 32,0 GB DDR4 nVidia Quadro K2200 Autodesk AutoCAD Architecture 2017 Autodesk AutoCAD Architecture 2018
|
erstellt am: 26. Sep. 2018 18:17 <-- editieren / zitieren --> Unities abgeben: Nur für kist
It's done Also bisher, mein Ziel habe ich erreicht, was bei meinem Script nicht klappt ist, wenn in der Zelle eine Zahl steht, dann funktioniert die Layer ausschaltung nicht. Meine Layer heißen aber nicht einfach nur eine Zahl wie z.B. 2901 oder ähnliches, Daher klappt das Script bei meinen ersten versuchen Als erstes schaltet es alle Layer aus, Dann schaut es in die Excel Tabelle Fängt bei A2 an zu lesen Schaltet den Layer mit dem Namen aus Zelle A2 ein Geht zur nächsten Zelle, gibt diese Zelle kein nil zurück, macht es soweiter und soweiter. Wenn eine Zelle ein nil zurück gibt, schaltet sich die while-schleife aus und das Script ist beendet. So sollte es funktionieren cadffm, danke für die ganzen Hinweise!! Und kist danke für deine Hilfeleistung trotz der Abwesenheit :P Und natürlich auch danke an alle, die mir geholfen haben, wie z.B. Vino und Brischke.
------------------ Liebe Grüße, Oli [Diese Nachricht wurde von OliCAD92 am 26. Sep. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 26. Sep. 2018 20:00 <-- editieren / zitieren --> Unities abgeben: Nur für kist
"was bei meinem Script nicht klappt ist, wenn in der Zelle eine Zahl steht, dann funktioniert die Layer ausschaltung nicht." Dann geh die Schritte durch und schau warum das so ist.. Hört sich aber an als wenn du eine Lispfunktion verwendest welche eine Zahl liefert. Wenn die Funktionen nur Zahlen erwartet würde zudem nicht das Programm vorher crashen, nicht erst bei der Layerschaltung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OliCAD92 Mitglied Konstrukteur (Bauunternehmen, Tiefbau)
Beiträge: 45 Registriert: 04.06.2018 Windows 7 Enterprise 64 Bit Intel Core i7-6700 32,0 GB DDR4 nVidia Quadro K2200 Autodesk AutoCAD Architecture 2017 Autodesk AutoCAD Architecture 2018
|
erstellt am: 27. Sep. 2018 12:14 <-- editieren / zitieren --> Unities abgeben: Nur für kist
Ich meine eine Zelle die einen Wert hat, nicht einen Textinhalt. Vorher gingen nur Werte wegen -> (fix ... Fix ist eben Integer oder Real, braucht also eine reine Zahl, keinen Text. Bzw kann keinen Text in eine Zahl umwandeln, fix dient ja dazu um Zahlen die Stellen nach dem Komma haben zu einer Zahl zu ändern, die keine Nachkommastelle mehr hat... Deshalb das (fix ... rausgenommen, nun gehen nur noch Wörter, die dürfen aber auch Zahlen beinhalten. Also perfekt, reine Zahlen als Layernamen nehme ich nicht, das Script soll bei mir funktioniern, tut es. Vielleicht gibt es auch eine Variante die eben eine funktion nutzt, die Zahlen und Wörter in die Variable schreibt, falls ja, kann man die schnell einbauen. Dann funktioniert das Script bei Layernamen die aus nur Zahlen bestehen und bei Layernamen die Buchstaben und Zahlen beinhalten. Für mich wäre das aber nur eine Zusatzfunktion, die wie oben gesagt bei mir nicht von nöten ist. ------------------ Liebe Grüße, Oli Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 27. Sep. 2018 12:35 <-- editieren / zitieren --> Unities abgeben: Nur für kist
"Vorher gingen nur Werte wegen -> (fix ..."So hat mein dezenter Hinweis also geholfen, schön. "(fix ... rausgenommen, nun gehen nur noch Wörter," Wie kommst du auf sowas? Du arbeitest auf der Überholspur und siehst einen großen Teil der vorbeiziehenden Dinge nicht. Ist einfach wie aus einem Buch nur einzelne Seiten lesen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|