Thema: Delphi Open Office Automation

Einzelnen Beitrag anzeigen

Steven2

Registriert seit: 17. Nov 2006
94 Beiträge
 
Delphi 11 Alexandria
 
#1

Open Office Automation

  Alt 11. Jun 2007, 13:20
Ich versuche Text in ein Open Office Writer Dokument einzufügen.
Ich dachte mir, dass ich dazu erst eine Textmarke einfügen muss um dann an dieser Stelle meinen Text einzufügen.
Aber es klappt nicht, sieht jemand meinen Fehler?
Oder funktioniert das einfügen von Textmarken nur über Makros?


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var vSvcMgr, vDesktop, vEmptyParam, vDoc, vBookmark, vTextCursor:OleVariant;
    sFileName:string;
begin
  vEmptyParam:=VarArrayCreate([0, -1], varVariant);
  vSvcMgr:=CreateOleObject('com.sun.star.ServiceManager');
  vDesktop:=vSvcMgr.createInstance('com.sun.star.frame.Desktop');
  if OpenDialog1.Execute then
  begin
    sFileName:=KonvFileName(OpenDialog1.FileName);
    vDoc:=vDesktop.LoadComponentFromURL(sFileName,'_blank',0, vEmptyParam);

    vBookmark := VDoc.createInstance('com.sun.star.text.Bookmark');
vBookmark.Name := 'test';
VDoc.Text.insertTextContent(vTextCursor, vBookmark, True);

    vBookMark:=vDoc.Bookmarks.getByName('test');
    vTextCursor:=vBookMark.Anchor.Text.createTextCursorByRange(vBookmark.Anchor);
    vTextCursor.SetString('Hallo OpenOffice!'#$A'Hier spricht Delphi...');
  end;
end;
Bekomme nach dem schliessen meines Formulars folgende Fehlermeldung:
Zitat:
---------------------------
Oo
---------------------------
InterfaceOleWrapper_Impl::Invoke :
[automation bridge]UnoConversionUtilities<T>::createOleObjectWrapper
The VARIANT does not contain an object type!
---------------------------
OK
---------------------------

Wenn schon eine Textmarke im Dokument vorhanden ist reicht dieser Code:

Delphi-Quellcode:
procedure TForm1.btnTextmarkenClick(Sender: TObject);
var vSvcMgr, vDesktop, vEmptyParam, vDoc, vBookmark, vTextCursor:OleVariant;
    sFileName:string;
begin
  vEmptyParam:=VarArrayCreate([0, -1], varVariant);
  vSvcMgr:=CreateOleObject('com.sun.star.ServiceManager');
  vDesktop:=vSvcMgr.createInstance('com.sun.star.frame.Desktop');
  if OpenDialog1.Execute then
  begin
    sFileName:=KonvFileName(OpenDialog1.FileName);
    vDoc:=vDesktop.LoadComponentFromURL(sFileName,'_blank',0, vEmptyParam);
    vBookMark:=vDoc.Bookmarks.getByName('test');
    vTextCursor:=vBookMark.Anchor.Text.createTextCursorByRange(vBookmark.Anchor);
    vTextCursor.SetString('Hallo OpenOffice!'#$A'Hier spricht Delphi...');
  end;
end;
Grüße
Steven
  Mit Zitat antworten Zitat