jenniguigui
Messages postés20Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention26 août 2009
-
25 août 2009 à 14:58
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
26 août 2009 à 19:12
Bonjour !
Voila, tout est dans le titre, j'affiche des informations de ma base de donnée dans une grille de type TRxDBGridSort et j'aimerai que l'utilisateur puisse exporter cette grille en format xls pour l'enregistrer sur son bureau ou n'importe... Je sais pas quoi dire de plus je pense que c'est clair mais au cas ou ça ne le serait pas, n'hésitez pas.
Merci d'avance
jenniguigui
Messages postés20Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention26 août 2009 26 août 2009 à 14:22
Merci pour ta réponse, j'avais trouvé un bout de code sur ce forum et je l'ai adapté a mes besoins, je le poste au cas ou ça intéresserai quelqu'un même si j'ai pas tellement modifié l'original :
Il faut donc appeler la fonction SaveAsExcelFile qui renvoie vraie si l'export a bien eu lieu et faux sinon.
Elle prend deux paramètres, la grille que l'on veut exporter, et le chemin ou on souhaite exporter cette grille finit par le nom.
Donc par exemple je veux exporter ma grille "tableau" et l'enregistrer dans programme files en la nommant "essai" bien j'aurai :
if (SaveAsExcelFile(tableau, 'C:\Program Files\essai.xls')) then
showmessage('l''export a bien été fait')
else
showmessage('l''export n''a pu se faire');
function SaveAsExcelFile(AGrid: TRxDBGridSort; AFileName: string) : Boolean ;
const
{$J+} CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0); {$J-}
CXlsEof: array[0..1] of Word = ($0A, 00);
var
FStream: TFileStream;
I, J, k: Integer;
Memo : String;
begin
Result:=false;
//Cré le fichier xls dans lequel on va enregistrer la dbgrid
FStream := TFileStream.Create(PChar(AFileName), fmCreate or fmOpenWrite);
j:=0;
try
//On se place sur la première ligne de la dbgrid
AGrid.datasource.dataset.First;
while not(AGrid.datasource.dataset.Eof) do
begin
CXlsBof[4] := 0;
FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
for i :=0 to AGrid.ColCount - 2 do
begin
//On vérifie que la colonne ne représente pas une image puisque ca ne peut pas s'enregistrer dans un fichier xls
if (not((AGrid.datasource.DataSet.FieldByName(AGrid.columns[i].FieldName)).Datatype=ftBlob)) then
//Si ce n'est pas un mémo on enregistre tel quel dans le fichier
if (not((AGrid.datasource.DataSet.FieldByName(AGrid.columns[i].FieldName)).Datatype=ftMemo)) then
XlsWriteCellLabel(FStream, I, J, AGrid.columns[i].Field.AsString)
//Si c'est un mémo on remplace les sauts de ligne par un espace
else
begin
Memo:=AGrid.columns[i].Field.AsString;
Memo := StringReplace(Memo, char(10),' ', [rfreplaceAll]);
Memo := StringReplace(Memo, char(13),' ', [rfreplaceAll]);
XlsWriteCellLabel(FStream, I, J, Memo);
end;
end;
j:=j+1;
AGrid.datasource.dataset.Next;
end;
FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
Result:=true;
finally
FStream.Free;
end;
end;
procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
const AValue: string);
var
L: Word;
const
{$J+}
CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
{$J-}
begin
L := Length(AValue);
CXlsLabel[1] := 8 + L;
CXlsLabel[2] := ARow;
CXlsLabel[3] := ACol;
CXlsLabel[5] := L;
XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
XlsStream.WriteBuffer(Pointer(AValue)^, L);
end;
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 25 août 2009 à 16:02
Bonjour,
je ne connais pas le TRxDBGridSort mais c'est un dbgrid apparemment...
donc chercher :
- s'il possède des méthodes d'exportation toutes prêtes.
- voir aussi les autres compos de la palette
- soit utiliser des méthodes basées sur les datasets
jenniguigui
Messages postés20Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention26 août 2009 26 août 2009 à 16:59
en fait, "Exporter en xls" est contenu dans un popupmenu qui est générer dans une fiche unit1 et comme tous mes fiches héritent de unit1 bien sur je ne répète pas la fonction pour chaque grille.
Je pense que ca rejoint ce que tu voulais dire ?
De plus, le fichier a bien une extension xls et affiche bien les informations nécessaires présentent dans les grilles de mon progiciel alors cela suffit amplement.
Bonne journée ! Et je ne le dirais jamais assez, merci
Vous n’avez pas trouvé la réponse que vous recherchez ?