Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Excel-Datei als Object

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Excel-Datei als Object (1632 mal gelesen)
Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 11. Feb. 2008 14:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 11. Feb. 2008 21:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 12. Feb. 2008 08:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

DAAAAANKE !!!!!
Das Workbooks-Objekt isses.
Ich hab nach der Open-Methode gesucht und da ist sie.
Und schon funktioniert alles.

Us4U
Danke
Gruß
Andreas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 12. Feb. 2008 09:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 12. Feb. 2008 12:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

... 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


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 12. Feb. 2008 12:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Aha,
muß ich doch mal schauen wo ich da nicht aufgeräumt hab.

Danke
Gruß
Andreas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

autocart
Mitglied
Technischer Redakteur


Sehen Sie sich das Profil von autocart an!   Senden Sie eine Private Message an autocart  Schreiben Sie einen Gästebucheintrag für autocart

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 17. Feb. 2009 06:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von autocart an!   Senden Sie eine Private Message an autocart  Schreiben Sie einen Gästebucheintrag für autocart

Beiträge: 695
Registriert: 08.09.2003

erstellt am: 17. Feb. 2009 19:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz