cs_couf
Messages postés213Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention 6 janvier 2011
-
8 juil. 2009 à 18:22
cs_couf
Messages postés213Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention 6 janvier 2011
-
15 juil. 2009 à 17:21
Bonjour à Tous
Je viens encore solliciter votre aide, et remercie quiconque voudra bien se pencher sur mon code
Je tiens à dire que la recherche francophone et anglophone sur le sujet en delphi est très rare.
Voilà j'ai le code suivant (c'est une application console car dois se lancer via scheduller)
program TCD;
cs_couf
Messages postés213Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention 6 janvier 20111 15 juil. 2009 à 17:21
Bonjour
Bon je vais me répondre à moi même ;-)
ce site m'a souvent aidé et sa philosophie est bonne
je décide de mettre ce petit bout de code ici car question TCD Delphi
on ne trouve rien sur aucun site Francophone ni anglophone du reste.
Si ce bout de code vous a été utile faites le moi savoir
Ce TCD s'appuie sur un fichier excel de 24 colonnes et de 1722 lignes.
J'ai choisi de montrer comment créer un TCD sur une nouvelle feuille
puis 2 TCD sur une PAGE
**************************************************************************************************************************************************************************************
**************************************************************************************************************************************************************************************
program TCD;
{$APPTYPE CONSOLE}
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
comobj,
ExtDlgs,
StdCtrls,
strutils,
shellapi,
inifiles,
comini; [b]// c'est une unité que j'ai créé car demandé par le compilateur
/b var
chrep,jourq:string;
Jour1:integer;
vCell,vWorksheet, vMSExcel:olevariant;
fileini:Tinifile;
FichiersXLS, aSheetName ,vFileName : AnsiString;
begin
{ TODO -oUser -cConsole Main : Insert code here }
[b]//On ouvre une nouvelle instance
/b vMSExcel := CreateOleObject('Excel.Application');
vMSExcel.Visible := true;
vFileName := 'c:\TCD\conso.xls';
aSheetName := 'conserve';
//astuce dans mon fichier qui va me permettre de récupérer la valeur d'une cellule
vmsexcel.workbooks.open(vfilename);
vcell: = vmsexcel.activeworkbook.activesheet.range['E4'];
jour1:= vcell.value;
jourq :=inttostr(jour1) ;
delete(jourq, 7, 2);
// ici il faut sélectionner tous les champs qui vont être concerné par notre Tableau croisé dynamique
vmsexcel.activeworkbook.activesheet.range['A3'];
vmsexcel.selection.currentregion.select;
// création d'un tableau croisé dynamique vmsexcel.activeworkbook.PivotCaches.add(xlDatabase,quotedstr
('conso MDM')+ '!R3C1:R251C21').CreatePivotTable('', 'TCD1','XlPivotTableversion10');;
[b]//ATTENTION ici vous pourriez vous arracher les cheveux la propriété function de la classe pivotfields
par défaut quand vous faites votre TCD et que votre programme rencontre des valeurs numériques par défaut il en fait une somme.
si vous voulez compter une valeur numérique vous devez utiliser les 2 fonctions xlCount (case non vide de valeur numérique ou non)
ou xlcountnums (case non vide valeur numérique uniquement) pivotfields('somme de n° récep') parceque le champs change de
nom et s'appelle désormais 'somme de n° récep'/b
vmsexcel.activeworkbook.activesheet.pivottables('TCD1').pivotfields('somme de n° récep').function:=-4113;
vmsexcel.activeworkbook.activesheet.name:='récap_' + jourq ;
on renomme la feuille de calcul de son TCD
{********************************************************************************************************************//
* 3 ème et 4 ème TCD sur la même feuille
*
********************************************************************************************************************}
[b] //champs pages ne pas oublier avant d'activer la feuille ou l'on veut mettre les données
/b vcell.activate;
vmsexcel.activeworkbook.activesheet.PivotTables('TCD4').pivotfields('n° compte').orientation: =xlpagefield;
vmsexcel.activeworkbook.activesheet.pivottables('TCD4').pivotfields('n° compte').caption:= 'n° compte';
vmsexcel.activeworkbook.activesheet.pivottables('TCD4').pivotfields('n° compte').position:=1;
vmsexcel.activeworkbook.SaveAs(FichiersXLS,-4143); // pas obligatoire ici mon fichier original est en excel V2.0 eeeeeeeeeh oui
ne pas oublier de libérer le processus
vmsexcel.quit;
vmsexcel := unassigned;