AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OpenOffice und OLE, wie ?

Offene Frage von "thaman"
Ein Thema von JoelH · begonnen am 23. Jul 2003 · letzter Beitrag vom 24. Aug 2009
Antwort Antwort
Seite 3 von 3     123   
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#21

Re: OpenOffice und OLE, wie ?

  Alt 19. Aug 2009, 13:53
Schade, das kenne ich leider schon. So grundlege Sachen sind mir klar, wie Öffnen, Texte bei Textmarken einfügen, Dokument speichern und ein wenig Scalc. Was jedoch so überhaupt nicht klar ist, ist wie man Platzhalter manipuliert, z.B. mit Text füllt oder ganz löscht.

Ich gehe mal davon aus, das
Delphi-Quellcode:
enum := Document.getTextFields.createEnumeration;
while enum.hasMoreElements do begin
  field := enum.nextElement;
  if field.TextFieldMaster.Name = 'Namethen begin
      InputField := Document.createInstance('com.sun.star.text.TextField.Input');
      // Löschen oder Text setzten
  end;
end;
Das ist so in etwa das Einzige, was man im netz finden kann. Wobei das nach meinem Verständnis auch nicht gehen kann, weil jeglicher Zusammenhang zwischen INputField und field fehlt. Oder geht das trotzdem irgendwie so?
MFG
LokutusvB
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#22

Re: OpenOffice und OLE, wie ?

  Alt 19. Aug 2009, 14:04
Zitat von LokutusvB:
Nein, diesen OleViewer habe ich noch nicht installiert.
Wie gesagt: Pflichtprogramm.
Ich habe Open Office nicht installiert, deshalb zeige ich die Vorgehensweise mit Microsoft Word.
1.) OleView starten und links im Baum das Item "Type Libraries" aufklappen.
Im 1. Screenshot sieht man, dass ich "Microsoft Word 11.0 Object Library" ausgewählt habe.
Du wählst natürlich irgend etwas mit "Open Office" aus.
2.) Doppelklick darauf öffnet ein neues Fenster (2. Screenshot)
Unter "Interfaces" sieht man die ganzen Schnittstellen.
3.) auch bei WinWord gibt es ein Interface "IField"
Im 3. Screenshot sieht man rechts die Methoden dazu.
Unter Anderem gibt es zweimal die Methode "Data" (Propget und Propput sagt aus, dass die Methoden an ein Property angebunden sind )
In diesem Fall (WinWord) könnte man also schreiben:
field.Data := 'der neue Inhalt'; Mir hat natürlich niemand gesagt, dass das Property Data für den Inhalt des Feldes steht.
Aber anhand des Namens erscheint das doch ziemlich logisch.

Jetzt musst du nur noch das neue Wissen auf Open Office übertragen.
Miniaturansicht angehängter Grafiken
oleview3_115.gif   oleview2_713.gif   oleview1_200.gif  
Andreas
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#23

Re: OpenOffice und OLE, wie ?

  Alt 19. Aug 2009, 14:47
Ich habe den OLE/COM Object Viewer aus dem Resource Kid 2000 installiert und gestartet. IN den Type Libraries ist alles Mögliche drinn, von A bis Z, jedes noch so glitzekleine installierte Programm, allerdings kein Open Office. Dieser Viewer hat leider keine Such-Funktion. Ist nun mein Open Office fehlerhaft installiert oder was ist hier nun wieder los?
MFG
LokutusvB
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#24

Re: OpenOffice und OLE, wie ?

  Alt 20. Aug 2009, 17:47
Ich bin nun auch ohne diesen für OO anscheinend nicht funktionierenden Viewer ein Stückchen weiter gekommen. Meine 2 Hauptprobleme sind zum einen die für mich recht unverständliche OO-API und zum anderen das richtige Zuordnen der Felder zu ihren Namen in der OO-API.

Durch folgenden Quelltext konnte ich zumindest schon winzig kleine Teilerfolge ermitteln:
Delphi-Quellcode:
function TOLE_OpenOffice.EntfPlatzhalter(platzhalter: String): Boolean;
var
  enum, field, InputField: Variant;
begin
  enum := Document.getTextFields.createEnumeration;
  while enum.hasMoreElements do begin
    field := enum.nextElement;
    // if VarType(field) <> varDispatch then ShowMessage('kein Dispatch-Interface vorhanden!');
    if field.supportsService('com.sun.star.text.TextField.Input') then begin
      ShowMessage('Input');
      ShowMessage(field.getPropertyValue('Hint'));
      ShowMessage(field.getPropertyValue('Content'));
      field.setPropertyValue('Content', 'Test-Content');
      Document.TextFields.refresh;
    end;
    if field.supportsService('com.sun.star.text.TextField.User') then begin
      ShowMessage('User');
    end;
    if field.supportsService('com.sun.star.text.TextField.InputUser') then begin
      ShowMessage('InputUser');
    end;
  end;
end;
So konnte ich zumindest ersteinmal herausfinden, daß die Platzhalter (Feldtyp->Platzhalter, Format->Text). nicht vom Typ Input sind, wie bisher von mir angenommen. Nur von welchem Typ sind sie dann?

Daraufhin habe ich ein Benutzerfeld vom Typ Text angelegt, und siehe da, es handelt sich um ein User-Feld. Daraufhin habe ich mich in der API zu User durchgeklickt, in der Hoffnung hier die Methoden zur Bearbeitung zu finden, aber Pustekucken, da stehen nur die Eigenschaften drinn. Entweder ist es jetzt schon zu spät, um klare Gedanken zu fassen oder aber die Open Office API ist die Schlimmste, mit der ich bisher zu tun hatte.

Kann jemand bei einem der beiden Probleme weiter helfen (also Methodensuche oder aber Felder und ihre bezeichnung in der API) oder sollte ich mich damit lieber an ein OO-Forum wenden?
MFG
LokutusvB
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#25

Re: OpenOffice und OLE, wie ?

  Alt 24. Aug 2009, 15:33
Um das Ganze abzuschließen, mit folgendem Code kann man einfach den Content des Feldes (Funktionen -> Eingabefeld) ändern:

Delphi-Quellcode:
function EditInput(name, inhalt: String): Boolean;
var
  enum, field: Variant;
begin
  Result := False;
  enum := Document.getTextFields.createEnumeration;
  while enum.hasMoreElements do begin
    field := enum.nextElement;
    if field.supportsService('com.sun.star.text.TextField.Input') then begin
      if (field.getPropertyValue('Hint') = name) then begin
        field.setPropertyValue('Content', inhalt);
        Document.TextFields.refresh;
        Result := True;
      end;
    end;
  end;
end;
MFG
LokutusvB
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 Uhr.
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