Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi OpenOffice Serienbrief Fehlermeldung (https://www.delphipraxis.net/80353-openoffice-serienbrief-fehlermeldung.html)

Grolle 7. Nov 2006 20:59


OpenOffice Serienbrief Fehlermeldung
 
Hallo,
ich versuche ein *.odt-Dokument von meiner Anwendung aus zu starten. Hier der Code:
Delphi-Quellcode:
      try
        vEmptyParam:=VarArrayCreate([0, -1], varVariant);
        vSvcMgr:=CreateOleObject('com.sun.star.ServiceManager');
        vDesktop:=vSvcMgr.createInstance('com.sun.star.frame.Desktop');
        vMailMerge :=vSvcMgr.createInstance('com.sun.star.text.MailMerge');
      except
        raise Exception.Create('Open Office Writer konnte nicht gestartet werden!');
        Exit;
      end;
      sFileName := KonvFileName(ExtractFilePath(ParamStr(0))+ 'vorlagen\serienbriefoo.odt');
      vDoc:=vDesktop.LoadComponentFromURL(sFileName,'_blank',0, vEmptyParam);
      vMailMerge.DataSourceName := 'Adressen';
      vMailMerge.DocumentUrl := sFileName;
      vMailMerge.Execute();
Beim ausführen bekomme ich die Fehlermeldung:
Zitat:

.. ist eine exception der Klasse EOleSysError mit der Meldung Typkonflikt aufgetreten.
Kann mir da jemand weiterhelfen?
Viele Grüße....

pmoegenb 8. Nov 2006 08:15

Re: OpenOffice Serienbrief Fehlermeldung
 
Probiers mal so:
Delphi-Quellcode:
procedure TForm1.MailMerge;
var
   MMerge, MMArgs: OleVariant;
   Dokumentenname_Old, Dokumentenname_New, LoadDok, OOoDB: string;
begin
     If Filename = '' then
        begin
        Messagedlg('Dokument wurde nicht geladen', mtError, [mbOK], 0);
        exit;
        end;
     OOoDB := 'MVASpenden';
     Dokumentenname_Old := Filename;
     Dokumentenname_New := 'Test';
     LoadDok := 'D:\Tmp\'+Dokumentenname_New+'0'+'.odt';
     MMArgs := VarArrayCreate([0, 6], varVariant);
     MMerge := OOo.oMerge;
     MMArgs[1] :=OOo.NamedValue('DocumentURL', OOo.ToOOPfad(Dokumentenname_Old));
     MMArgs[0] :=OOo.NamedValue('DataSourceName', OOoDB);
     // 0=Tabellen 1=Abfragen 2=SQL-Abfragen
     MMArgs[2] := OOo.NamedValue('CommandType', 0);
     MMArgs[3] := OOo.NamedValue('Command', 'Spenden');
     // Ausgabe an 1=Drucker 2=Datei
     MMArgs[4] := OOo.NamedValue('OutputType', 2);
     MMArgs[5] := OOo.NamedValue('OutputURL', OOo.ToOOPfad('D:\Tmp'));
     MMArgs[6] := OOo.NamedValue('FileNamePrefix', Dokumentenname_New);
     MMerge.execute(MMArgs);
     OOo.Open(LoadDok);
end;

Grolle 9. Nov 2006 00:04

Re: OpenOffice Serienbrief Fehlermeldung
 
Hi,
bekomme jetzt folgende Fehlermeldung:
Zitat:

ist eine exception der Klasse EVariantInvalidOpError mit der Meldung Ungültige Variantenoperation aufgetreten.
:gruebel:

pmoegenb 9. Nov 2006 09:45

Re: OpenOffice Serienbrief Fehlermeldung
 
Mist, ich habe die Funktion NamedValue vergessen.

Delphi-Quellcode:
function TOLE_OpenOffice.NamedValue(vName, vValue: OleVariant): OleVariant;
var
   oPropertyValue: OleVariant;
begin
     oPropertyValue := createStruct('com.sun.star.beans.NamedValue');
     oPropertyValue.Name := vName;
     oPropertyValue.Value := vValue;
     Result := oPropertyValue;
end;
und
Delphi-Quellcode:
oMerge := Service.CreateInstance('com.sun.star.text.MailMerge');
muss natürlich auch abgesetzt werden.

Grolle 9. Nov 2006 12:14

Re: OpenOffice Serienbrief Fehlermeldung
 
Hi,
vielen dank für deine Hilfe. Ich bin jetzt bis an diese Stelle gekommen:
oPropertyValue := createStruct('com.sun.star.beans.NamedValue');
Hier meckert der Compiler über eine ungültige Typumwandlung :gruebel:

pmoegenb 9. Nov 2006 15:29

Re: OpenOffice Serienbrief Fehlermeldung
 
Hast Du die Unit Variants eingebunden ??

Grolle 9. Nov 2006 21:07

Re: OpenOffice Serienbrief Fehlermeldung
 
Ja, hab ich...

pmoegenb 10. Nov 2006 07:45

Re: OpenOffice Serienbrief Fehlermeldung
 
Hallo Stefan,

alle Proceduren und Funktionen sind unter D7 ausgetestet. Weshalb D2005 darüber meckert ist mir nicht klar.

P. S. Habe ich übersehen. Dir fehlt noch folgende Funktion:
Delphi-Quellcode:
function TOLE_OpenOffice.CreateStruct(strTypeName: OleVariant): OleVariant;
var
   aStruct, ClassSize: OleVariant;
begin
     ClassSize := CoreRefl.forName(strTypeName);
     classSize.CreateObject(aStruct);
     Result := aStruct;
end;
Ich lasse Dir meine gesammelten Werke per Email zugehen.

Grolle 10. Nov 2006 09:15

Re: OpenOffice Serienbrief Fehlermeldung
 
Sind angekommen. Werde mich später da mal ausgiebig mit befassen.
Vielen Dank schonmal!


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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 by Thomas Breitkreuz