![]() |
Re: OpenOffice und OLE, wie ?
Hallo!
Das Speichern eines Dokumentes mache ich immer mit der folgenden Methode:
Code:
procedure TSampleCode.SaveAs (name : string);
var saveparams : variant; begin SaveParams := VarArrayCreate([0, -1], varVariant); Document.StoreAsURL ('file:///'+name,saveparams); end; Das Schließen eines Dokumentes habe ich bisher noch nicht ausprobiert. Der Aufruf müßte aber recht ähnlich aussehen. MfG Daniel |
Re: OpenOffice und OLE, wie ?
Hallo,
Das Dokument schließen kann man mit: Document.close(); Und Staroffice lässt sich bei mir mit: Desktop.terminate; Jetzt habe ich nur noch das Problem wie ich auf Formfields zugreifen kann. Also den Inhalt von Textfeldern und Checkboxen lesen und setzen kann. Hat da jemand erfahrung? Ich komme irgendwie mit der Api Doku von Openoffice garnicht zurecht. Irgendwie ist immer alles querverlinkt und nicht besonders übersichtlich. gruß thaman |
Re: OpenOffice und OLE, wie ?
okay, das Laden geht ja jetzt ganz gut, aber wie minimiere ich OpenOffice direkt nach Laden des Dokuments, damit das Ding mir nicht den Bildschirm zuknallt, wenn ich mit dem eigenen Programm arbeiten will, das nur auf eine Tabelle von OO zugreift?
|
Re: OpenOffice und OLE, wie ?
Zitat:
Hallo, genau das gleiche Problem habe ich auch, ich kann einfach nicht auf die Feld-Inhalte zugreifen. mit
Code:
finde ich zwar die Felder anhand ihres Namens, aber kann deren Inhalt nicht ändern.
...
enum := Document.getTextFields.createEnumeration; while enum.hasMoreElements do begin if field.TextFieldMaster.Name = 'Name' then begin InputField := Document.createInstance('com.sun.star.text.TextField.Input'); InputField.Content := 'Inhalt'; end; end; ... Vielen Dank im Voraus! Grüße, Chris |
Re: hmm,
Zitat:
eines Automatisierungsobjekts oder Parameter für ein Automatisierungsmethode speichern möchtest. Der Typ OleVariant bezeichnet eine Variante, die ausschließlich COM-kompatible Typen enthält. Wenn ein Variant-Wert einem OleVariant-Wert zugewiesen wird, werden alle nichtkompatiblen Typen in ihre kompatiblen Entsprechungen umgewandelt. Wenn z.B. eine Variante, die einen AnsiString-Wert enthält, einem OleVariant-Wert zugewiesen wird, wird AnsiString in den Typ WideString konvertiert. Zitat:
![]() |
Re: OpenOffice und OLE, wie ?
Hallo nochmal,
habe das Problem leider immernoch nicht gelöst. Kann mir denn keiner von euch helfen :?: :cry: Grüße, Chris |
Re: OpenOffice und OLE, wie ?
Zitat:
ich habe nun in etwa das selbe Problem und konnte bisher im Netz so überhaupt keinen Lösungsansatz finden. Die Open Office API ist weiterhin eine totale Katastrophe. Den einzigen brauchbaren Lösungsansatz habe ich hier gefunden. Allerdings meckert er bei mir hier schon rum. Da mir unklar ist, welcher Datentyp enum, field und inputfield ist, habe ich ihn standardmäßig wie das meinste OO-Zeugs auf Variant gesetzt. An der Stelle "field" allerdings meldet sich auch schon der Compiler und sagt mir, Variante referenziert kein Automatisierungsobjekt. Was ist da wieder verkehrt? Kann jemand weiter helfen? Ist es jemanden schon gelungen, diese Placeholder zu manipulieren? |
Re: OpenOffice und OLE, wie ?
Zitat:
Ohne dieses Tool braucht du gar nicht anfangen. Die Variable "field" wird in deinem Sourcecode nicht initialisiert. Dann ist es logisch, dass zur Laufzeit die Exception "Variante referenziert kein Automatisierungsobjekt" kommt. Nur wenn eine Variantvariable ein IDispatch-Interface enthält, darf man mit dem Punkt-Operator eine Methode aufrufen oder auf ein Property zugreifen. Zur Verdeutlichung folgendes Beispiel:
Delphi-Quellcode:
Das heisst also, dass man zum Debuggen immer schauen sollte, welchen VarType eine Variantvariable hat.
var
test:OleVariant; begin test := ..... // irgendwas if VarType(test) <> varDispatch then ShowMessage('kein Dispatch-Interface vorhanden!') else begin test.MethodeAufrufen; test.Left := test.Left + 1; // Property lesen/schreiben end; |
Re: OpenOffice und OLE, wie ?
Nein, diesen OleViewer habe ich noch nicht installiert. Anhand der COM-Seite werde ich nicht wirklich schlau :( und es entzieht sich mir, welchen Nutzen der Viewer dann für mein Problem hat.
Stimmt, "field" ist nun initialisiert und ich kann zumindest erkennen, das Input-Felder im Dokument sind. Nach wie vor bleibt das Problem, diesen Feldern Test zu spendieren bzw. ganz zu löschen, das Problem, was laut Google sehr viele haben und noch niemand lösen konnte. |
Re: OpenOffice und OLE, wie ?
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo LokutusvB,
ich hatte das gleiche Problem und gebe Dir Recht, die Schnittstelle ist sehr umständlich. Nach langem Suchen im Internet habe ich folgendes gefunden: OpenOfficeDelphi_OOo_v12en.zip Anbei übersende ich noch einen Codeschnipsel, der zeigt, wie ich das ganze benutze: demo-codefragment.zip Anmerkung: In der Datei OOoTools.pas habe ich die Varianten-Variable "disp" gegenüber des Orginals global zur Verfügung gestellt; sonst habe ich, glaube ich, nichts geändert. Ich hoffe damit ist Dir geholfen. Mfg Markus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz