Bonjour a tous !

Je souhaiterais me lancer un peu dans la manipulation des applications Office, Excel en particulier, via Delphi.

Par exemple j'essaye de coder une appli simple qui me permettrait d'ouvrir un workbook. Le but est de pouvoir ouvrir automatiquement, et en mode silencieux, un .xla contenant une macro workbook_open qui installerait une macro complementaire dans excel une bonne fois pour toute sans que l'utilisateur est a interagir de maniere a diffuser facilement des macros complementaires sur plusieurs postes.

Deux questions : comment gerer les espaces dans les paramstr(i) ? En faite je voudrais executer mon appli en ligne de commande genre : OpenWorkBook le chemin de mon appli. OpenWorkbook etant le nom de mon appli Delphi. Il y a-t-il une solution moins cochon que de reconstruire le chemin de l'appli en concatenant tous les paramstr(i) et en rajoutant des ' ' entre chacun ?

Existe-t-il un composant generique qui en fonction de la version d'excel presente sur le systeme s'adapte a lui ? Sinon comment faire ?

Merci pour vos reponses !

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
procedure TfrmMain.FormCreate(Sender: TObject);
var NomClasseur : ansistring;
    i : integer;
    vMSExcel,vXLWorkbooks : variant;
begin
  ShowWindow(Application.Handle, SW_HIDE);
 
  If Paramcount > 1 then
  begin
    nomclasseur := '';
    for i := 1 to paramcount do
    begin
      nomclasseur := nomclasseur + paramstr(i);
      if i < paramcount then nomclasseur := nomclasseur + ' ';
    end;
 
    if fileexists(nomclasseur) then
    begin
      try
        vMSExcel := GetActiveOleObject('Excel.Application');
      except
        vMSExcel := CreateOleObject('Excel.Application');
      end;
      vXLWorkbooks := vMSExcel.Workbooks;
      vXLWorkbooks.Open(NomClasseur);
 
      vMSExcel.Quit;
      vMSExcel := unassigned;
    end
    else
    begin
      showmessage(Nomclasseur + ' introuvable');
    end;
  end;
 
  application.terminate;
end;


Par contre est-ce que quelqu'un peut me confirmer que la facon dont j'ai procedé pour la gestion des espaces dans les parametres de la ligne de commande est bien la seule solution ?

Merci !