Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OpenOffice und OLE, wie ? (https://www.delphipraxis.net/6812-openoffice-und-ole-wie.html)

leeze 13. Aug 2003 16:54

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

thaman 7. Sep 2003 15:16

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

Guardian of Rlyeh 21. Apr 2004 13:36

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?

RasChris 16. Jul 2004 07:50

Re: OpenOffice und OLE, wie ?
 
Zitat:

Zitat von thaman
...
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


Hallo,

genau das gleiche Problem habe ich auch, ich kann einfach nicht auf die Feld-Inhalte zugreifen.

mit
Code:
...
  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;
...
finde ich zwar die Felder anhand ihres Namens, aber kann deren Inhalt nicht ändern.


Vielen Dank im Voraus!

Grüße,
Chris

shmia 16. Jul 2004 08:55

Re: hmm,
 
Zitat:

Zitat von JoelH
jetzt wo du es sagst, die OleVariant sind eigentlich völliger Unsinn, sollten normale Variants sein.

Das ist Falsch. OleVariants sollten immer dann verwendet werden, wenn du darin ein IDispatch-Interface
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:

Zitat von JoelH
Btw, gibt es mittlerweile mal ne vernünftige Doku wo die ganze API mit allen Funktionen beschrieben ist?!?

Du brauchst einen Typelibrary-Viewer um alle Automatisierungsschnittstellen von OpenOffice zu untersuchen.
http://www.microsoft.com/com/resources/oleview.asp

RasChris 20. Jul 2004 10:24

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

LokutusvB 7. Jul 2009 13:50

Re: OpenOffice und OLE, wie ?
 
Zitat:

Zitat von RasChris
...
mit
Code:
...
  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;
...
finde ich zwar die Felder anhand ihres Namens, aber kann deren Inhalt nicht ändern.
...

Hallo,

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?

shmia 8. Jul 2009 09:35

Re: OpenOffice und OLE, wie ?
 
Zitat:

Zitat von LokutusvB
... konnte bisher im Netz so überhaupt keinen Lösungsansatz finden...

Hast du den OleViewer (Beitrag #15) heruntergeladen und installiert?
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:
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;
Das heisst also, dass man zum Debuggen immer schauen sollte, welchen VarType eine Variantvariable hat.

LokutusvB 19. Aug 2009 09:02

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.

marky522 19. Aug 2009 11:19

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 02:33 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz