Bon-soir...
Je souhaite ecrire des données ( rassemblées dans un tableau dynamique de string ), d'une part dans un TStringGrid, ce qui ne pose pas de problème, et d'autre part dans une feuille Excel.
J'ai utilisé le pilotage OLE de Excel ( http://lfe.developpez.com/PasExcel/ ) en "remplissant" chaque cellule par 2 boucles for:
Le problème vient de la lenteur de l'écriture ( plus de 2 mn pour 70 lignes de 14 colonnes !!! )
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 type TTab_data = array of array of string; ... var xla, xlws, xlw : variant; ... begin vFileName := 'c:\temp\bil_mens.xlt' ; try xla := GetActiveOleObject('Excel.Application'); except xla := CreateOleObject('Excel.Application'); end; xla.Visible := False; xlws := xla.Workbooks; xlw := xlws.Open(vFileName); for colonne := 1 to c_max do for rangee := 1 to r_max do xla.Cells[rangee,colonne] := tab_data[colonne,rangee]
J'ai pensé que je pourrais accélérer en écrivant directement le tableau dans une plage de cellules... mais n'ai pas trouvé la solution ( si elle existe ? )
Je me suis rabattu ( pour la premiére fois ) sur le composant TExcelApplication pour mettre en oeuvre cette solution, mais je n'arrive pas à y remplir la moindre cellule ( et a fortiori une plage ! )
m'envoie une erreur de compilation:
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 procedure TfTest.FormActivate(Sender: TObject); var monclasseur : _workbook; mafeuille : _worksheet; rMaPlage : ExcelRange; begin ExcelApplication1.connect; MonClasseur:=ExcelApplication1.Workbooks.Open('C:\Temp\bil_mens.xlt',False,False, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0); ExcelApplication1.Visible[0] := True; MaFeuille:=MonClasseur.Worksheets[1] as _worksheet; MaFeuille.Range['E1','E3'].Value:= 12; end;
pour la ligne : MaFeuille.Range['E1','E3'].Value:= 12;Erreur .... : '[' attendu(e) mais ':=' trouvé(e)
Par ailleurs 'ExcelApplication1.Workbooks.Open' m'a réclamé 2 paramétres de plus que dans l'exemple de bidou (http://delphi.developpez.com/faq/?page=exceldelphi)
J'utilise Delphi 7, Excel 2003, le paquet dclofficexp70 pour TExcelApplication, le tout sous Windows XP Pro.
Quelques suggestions ?
Merci d'avance
Partager