| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Excel-Datei als Object (1693 mal gelesen)
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 11. Feb. 2008 14:26 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte Daten aus Lisp direkt in eine Excel-Datei schreiben. Geht ja auch wenn die Datei in Excel geöffnet ist mit: (setq excel (vlax-get-object "excel.application")) usw... Ich kann mir die Datei auch automatisch öffnen lassen wenn sie nicht offen ist. Hab ich hier was gefunden: http://ww3.cad.de/foren/ubb/Forum145/HTML/002049.shtml#000003 Hab ich mir gedacht, warum denn Excel starten ? Könnte doch auch so gehn: (setq excel (vlax-get-or-create-object "excel.application")) Aber wie öffne ich da jetzt die Excel-Datei damit ich Zugriff hab ? Ich find zwar die Methode "GetOpenFilename" aber ist es das was ich brauch ? und welche Argumente sind da zu liefern ? Oder geht das anders ? Oder mach ichs mir mal wieder zu einfach ? Kann ja sein daß ich die letzten Tage auf merkwürdige Ideen komm, aber ich denke das geht wieder vorbei Danke Gruß Andreas
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: 11. Feb. 2008 21:31 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Hallo Andreas, am besten du gehts im Excel in den VBA-Editor und drückst dort mal F1 [Hilfe]. Dort kannst du dann schauen, welche Objekte welche Methoden/Eigenschaften unterstützen. Diese alle kannst du dann auch aus Vlisp ansprechen. Zum öffnen einer Excel-Datei musst du erstmal das Workbooks-Objekt ermittel, welches dann die Methode OPEN anbietet. Schau bitte in der Excel-Hilfe nach den vielen möglichen Parametern, die noch mitzugeben sind, denn meist musst du auch die optionalen Parameter wenigstens als nil mitgeben. Bei Fragen ... Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 12. Feb. 2008 08:57 <-- editieren / zitieren --> Unities abgeben:
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 12. Feb. 2008 09:33 <-- editieren / zitieren --> Unities abgeben:
Hab doch noch was gefunden. Meine Konstruktion sieht jett so aus: (setq excel (vlax-get-or-create-object "excel.application")) (setq workbooks (vlax-get-property excel "Workbooks")) (vlax-invoke-method workbooks 'OPEN pfad) (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" ) ) ) ;;; Ab hier wird irgendwas mit Ecel gemacht (vlax-put-property ExcelCells "ITEM" 1 1 "'test1") (vlax-invoke-method ExcelWorkbook 'Save) (vlax-invoke-method ExcelWorkbook 'Close) (vlax-invoke-method excel 'QUIT) (vlax-release-object excel) (vlax-release-object ExcelWorkbook) (vlax-release-object ExcelSheet) (vlax-release-object ExcelCells) Wenn ich aber in den Task-Manager schaue läuft Excel immer noch und ist auch ansprechbar. Ich hab den Verdacht daß das Quit nicht funktioniert. Mich Jörns Programm gehts doch. Zitat: (SETQ vla-shellobj (VLAX-CREATE-OBJECT "Shell.Application")) (VLAX-INVOKE-METHOD vla-shellobj 'OPEN "C:\\Excel_test.xls") (IF (SETQ excel (VLAX-GET-OR-CREATE-OBJECT "Excel.Application")) ....daten auslesen.... ) ;;;Excel schließen (vlax-invoke-method (vlax-get-property excel "ActiveWorkbook") 'Close) (vlax-invoke-method excel 'QUIT) (vlax-release-object excel) (gc) ;;;Excel schließen Ende (VLAX-RELEASE-OBJECT vla-shellobj))
Was mach ich denn falsch ? Der Rest geht ja super. Gruß Andreas
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: 12. Feb. 2008 12:33 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
... ich würde mal sagen, dass du nicht alle geöffneten Dateien gespeichert hast. in meiner Excel-Hilfe steht dazu folgendes Zitat:
Quit (Methode) Siehe auchBetrifftBeispielBesonderheitenBeendet Microsoft Excel.Ausdruck.Quit Ausdruck Erforderlich. Ein Ausdruck, der ein Application-Objekt zurückgibt. Anmerkungen Wenn beim Verwenden dieser Methode ungespeicherte Arbeitsmappen geöffnet sind, gibt Ihnen Microsoft Excel mit einem Dialogfeld die Möglichkeit, die Änderungen zu speichern. Das Dialogfeld erscheint nicht, wenn Sie vor dem Verwenden der Quit-Methode alle Arbeitsmappen speichern oder wenn Sie die DisplayAlerts-Eigenschaft auf False festlegen. Wenn diese Eigenschaft auf False festgelegt ist, zeigt Microsoft Excel das Dialogfeld nicht an, wenn Sie das Programm beenden und noch ungespeicherte Arbeitsmappen haben, d.h. die Änderungen in den Arbeitsmappen gehen verloren. Wenn Sie die Saved-Eigenschaft einer Arbeitsmappe auf True festlegen, ohne die Arbeitsmappe auf der Festplatte zu speichern, wird Microsoft Excel ohne Aufforderung zum Speichern der Arbeitsmappe beendet. Beispiel In diesem Beispiel werden alle geöffneten Arbeitsmappen gespeichert und Microsoft Excel anschließend beendet. For Each w In Application.Workbooks w.Save Next w Application.Quit
Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 12. Feb. 2008 12:53 <-- editieren / zitieren --> Unities abgeben:
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 17. Feb. 2009 06:53 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Nur zum Nachlesen: In meiner Online-Hilfe steht nämlich auch noch was zum Schließen-Thema: Zitat: vlax-release-object Releases a drawing object(vlax-release-object obj) When an AutoLISP routine no longer uses an object outside AutoCAD, such as a Microsoft Excel object, call the (vlax-release-object) function to make sure that the associated application closes properly. Objects released with (vlax-release-object...) may not be released immediately. The actual release may not happen until the next automatic garbage collection occurs. You can call (gc) directly to force the garbage collection to occur at a specific location within your code. However, calling (gc) may degrade performance, and it is recommended that you avoid placing calls to (gc) in locations where it is likely to be called many times in a row, such as within loops. If an object-associated application does not close after calling the (gc) function, the (vlax-release-object) function was not called for all objects outside AutoCAD. Arguments obj A VLA-object. After release, the drawing object is no longer accessible through obj. Return Values Unspecified.
------------------ Gruß, Stephan www.stbartl.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003 If you want to help and want to respect other people's questions, then, please: Please, ALWAYS assume that I already tried to search for an answer to my question. Thx. Also, please, DON'T ask me what the "actual" goal of my question is. Please, firstly just answer it directly as stated - if you know an answer and want to give it. Only secondly, add other commments. Many, many, many thanks in advance!
|
erstellt am: 17. Feb. 2009 19:11 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Ich hatte jetzt übrigens auch das selbe Problem! Ich hatte die Excel-Application sogar auf "sichtbar" geschaltet und nach "Quit" verschwand das Excel-Fenster auch (also Speicher-Probleme ausgeschlossen), aber der Excel-Prozess im Task-Manager blieb trotzdem bestehen, auch nach einem (vlax-release-object excel) und einem (gc). Die Lösung war eine Kombination von Andreas und Jörns Code. Ich musste auch die Range-, Worksheet- und Workbook-Objekte releasen. Dann verschwand der Excel-Prozess auch aus dem Task-Manager ganz brav. ------------------ Gruß, Stephan www.stbartl.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |