1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
procedure Publipostage;
var
OpenOffice :Variant;
OpenDesktop :Variant;
CoreReflection :Variant;
Datacontext :Variant;
document :Variant;
LoadParams : Variant;
arguments : Variant;
Doc1 :Ansistring;
sSource:Ansistring;
instance:Variant;
Connection:Variant;
DocumentSetting:Variant;
OOoMailMerge:Variant;
function CreatePropertyValue(nom,valeur:variant):variant ;
var
PropertyValue :variant;
begin
CoreReflection.forName('com.sun.star.beans.PropertyValue').createObject(PropertyValue);
PropertyValue.Name := nom;
PropertyValue.Value := valeur;
result:=propertyvalue;
end;
begin
try
{ Connection à Open Office ... et ouverture d'un nouveau document ... }
OpenOffice := CreateOleObject('com.sun.star.ServiceManager');
OpenDesktop := OpenOffice.createInstance('com.sun.star.frame.Desktop');
CoreReflection := OpenOffice.createInstance('com.sun.star.reflection.CoreReflection');
LoadParams := VarArrayCreate([0, - 1], varVariant);
{ Ouvre un document vierge ... }
Doc1 :=StringReplace('D:\Publipostage.doc', '\', '/',[rfReplaceAll]);
sSource := 'file:///'+ StringReplace('D:\Dossier.Txt', '\', '/',[rfReplaceAll]);
Document := OpenDesktop.LoadComponentFromURL( 'file:///'+Doc1 ,'_blank',0,LoadParams );
Datacontext:=OpenOffice.createInstance('com.sun.star.sdb.DatabaseContext');
// creation d'un tableau dynamique de propertyvalues qui définissent le format de la datasource
arguments:= VarArrayCreate([0,7], varVariant);
arguments[0]:= createPropertyValue('Extension','txt' );
arguments[1]:= createPropertyValue('CharSet','ISO-8859-15') ;//ou 'ISO646-FR1'
arguments[2]:= createPropertyValue('FixedLength',true) ;
arguments[3]:= createPropertyValue('HeaderLine',true) ;
arguments[4]:= createPropertyValue('FieldDelimiter',';') ;
arguments[5]:= createPropertyValue('StringDelimiter','"') ;
arguments[6]:= createPropertyValue('DecimalDelimiter','.') ;
arguments[7]:= createPropertyValue('ThousandDelimiter',',') ;
//création de la datasource avec parametres
instance:=Datacontext.createInstance;
instance.URL:= 'sdbc:flat:'+ sSource;
instance.Info:= arguments;
instance.DatabaseDocument.storeAsUrl('file:///' + StringReplace('D:\MySourceDossier1.odb', '\', '/',[rfReplaceAll]), VarArrayCreate([0, - 1], varVariant));
datacontext.registerObject('Dossier',instance);
Connection:=instance.getconnection('','');
DocumentSetting := Document.createInstance('com.sun.star.text.DocumentSettings'); { a Rajouté juste aprés l'ouverture du document ...}
DocumentSetting.CurrentDatabaseDataSource := 'MySourceDossier1.odb';
DocumentSetting.CurrentDatabaseCommand := 'Dossier';
DocumentSetting.CurrentDatabaseCommandType := 0;
{Jusqu'ici tous fonctionne correctement !}
OOoMailMerge := OpenOffice.createInstance('com.sun.star.text.MailMerge');
OOoMailMerge.ActiveConnection := Connection;
OOoMailMerge.DataSourceName := 'MySourceDossier1.odb';
OOoMailMerge.DocumentURL := 'file:///'+ Doc1;
OOoMailMerge.CommandType := 0; { Mon erreur (1) venais de la ... remplacer 1 par 0 ... }
OOoMailMerge.Command := 'Dossier';
OOoMailMerge.OutPutType := 2;
OOoMailMerge.OutPutURL := 'file:///D:/';
OOoMailMerge.FileNamePrefix := 'Dossier.odt';
OOoMailMerge.FileNameFromColumn := False;
OOoMailMerge.Execute(VarArrayCreate([0,-1],varVariant)); //C'est ici que l'erreur se manifeste
finally
OOoMailMerge:=Unassigned;
DocumentSetting:=Unassigned;
arguments:=Unassigned;
CoreReflection:=Unassigned;
OpenDesktop:=Unassigned;
OpenOffice:=Unassigned;
end; |
Partager