Bonjour à tous !
Je me suis récemment attaqué au code permettant de lancer LibreOffice pour effectuer un publipostage sans avoir besoin d'effectuer les manipulations qui lui sont d'ordinaire nécessaire. Utilisant RAD Studio, j'ai alors rencontré un problème: au moment d'ouvrir une instance, le message "Type de variable incorrect" s'affiche. Comment que ça marche ?!! Merci !

code c++:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <ComObj.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Variant vOOoOpenOffice, vOOoDesktop, vOOoLoadParams, vOOoDocument, vOOoPropertyValue;
	try
	{
		vOOoOpenOffice = CreateOleObject("com.sun.star.ServiceManager");
	}
	catch (...)
	{
		// si on passe ici c'est qu'il y a une erreur
	}
	if (VarType(vOOoOpenOffice) == varDispatch)
	{
		vOOoDesktop = vOOoOpenOffice.OleFunction("createInstance", "com.sun.star.frame.Desktop");
	}// permet d'ouvrir une instance existante
	int Bounds[2] = {0,0};
	vOOoLoadParams = VarArrayCreate(Bounds, 1, varVariant);//
	vOOoPropertyValue = vOOoOpenOffice.OleFunction("Bridge_GetStruct", "com.sun.star.beans.PropertyValue");
	vOOoPropertyValue.OlePropertySet("Name", "ReadOnly"); // pour ReadOnly ou pour Hidden
	vOOoPropertyValue.OlePropertySet("Value", true);
	vOOoLoadParams.PutElement(vOOoPropertyValue, 0);
	//ouverture fichier existant
	// FilePath = "file://localhost/C:/essai.sxc" -- pour un fichier Calc
	//ou
	// FilePath = "file:///C:/essai.sxc" -- pour un fichier Calc
	AnsiString FileName = "file:///C:/";
	// FileName += ExtractFilePath(Application->ExeName);
	FileName += "Lettre_type.odt";
	//FileName = StringReplace(FileName,"<A href="file://\\","/",TReplaceFlags">\\","/",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase);
	Variant vFileName = StringToOleStr(FileName);
	vOOoDocument = vOOoDesktop.OleFunction("LoadComponentFromURL",vFileName,"_blank",0,vOOoLoadParams);
}
//---------------------------------------------------------------------------