Bonjour;
Comment faire exporter les données d'un table ou d'un query depuis Delphi2007 vers MS_Excel 2007 .
J'ai essai plusieurs méthodes, mais je n'ai pas réussi.
Quel est la solution? SVP.
Bonjour;
Comment faire exporter les données d'un table ou d'un query depuis Delphi2007 vers MS_Excel 2007 .
J'ai essai plusieurs méthodes, mais je n'ai pas réussi.
Quel est la solution? SVP.
un problèmes bien soumis est a moitié résolu.
c'est données proviennent certainement d'une base de donnée, elle est de quel type.
Bonjour,
J'ai écrit un petit bout de code. Je ne sais pas si cela correspond à ce que tu souhaites, mais cela peut de donner une piste. Attention tout de même, il n'est certainement pas 100% finalisé, il correspond juste à mon besoin.
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 procedure DataSetToExcel( iDataSet: TDataSet; const iFileName: string; iBreak: integer = -1 ); const cMax = 65535; xlWBATWorksheet = -4167; var lExcelApp, lSheet: OleVariant; lRowDB, lPage, lRow, lCol: integer; lPrevValue: string; begin DeleteFile( iFileName ); lExcelApp := CreateOleObject( 'Excel.Application' ); try lExcelApp.Visible := false; lExcelApp.Workbooks.Add( xlWBATWorksheet ); try with iDataSet do begin lRowDB := -1; while not Eof do begin Inc( lRowDB ); if lRowDB mod cMax = 0 then begin lPage := 1 + lRowDB div cMax; if lPage <> 1 then lExcelApp.Worksheets.Add( , lExcelApp.Workbooks[ 1 ].WorkSheets[ -1 + lPage ] ); lSheet := lExcelApp.Workbooks[ 1 ].WorkSheets[ lPage ]; lSheet.Activate; {* Header *} lRow := 1; lPrevValue := '************'; for lCol := 0 to Pred( FieldCount ) do begin lSheet.Cells[ lRow, 1 + lCol ] := Fields[ lCol ].FieldName; end; end; if iBreak <> -1 then begin {* Break Handling *} if not SameText( lPrevValue, Fields[ iBreak ].AsString ) then begin if not SameText( lPrevValue, '************' ) then begin lPrevValue := Fields[ iBreak ].AsString; Inc( lRow ); Continue; end else begin lPrevValue := Fields[ iBreak ].AsString; end; end; end; {* Value *} Inc( lRow ); for lCol := 0 to Pred( FieldCount ) do begin if not Fields[ lCol ].IsNull then begin try case Fields[ lCol ].DataType of ftInteger: lSheet.Cells[ lRow, 1 + lCol ].Value := Fields[ lCol ].AsInteger; ftFloat: lSheet.Cells[ lRow, 1 + lCol ].Value := Fields[ lCol ].AsFloat; ftDateTime: lSheet.Cells[ lRow, 1 + lCol ].Value := Fields[ lCol ].AsDateTime; // ftDateTime: lSheet.Cells[ lRow, 1 + lCol ].Formula := DateToDateEx( Fields[ lCol ].AsDateTime ); ftString: lSheet.Cells[ lRow, 1 + lCol ].Value := Fields[ lCol ].AsString; else lSheet.Cells[ lRow, 1 + lCol ].Value := GetEnumName( TypeInfo( TFieldType ), Ord( Fields[ lCol ].DataType ) ); end; except on E: EOleException do begin lSheet.Cells[ lRow, 1 + lCol ].Value := 'EOleException'; end; end; end; if iBreak <> -1 then lSheet.Cells[ lRow, 1 + lCol ].Interior.ColorIndex := 35; end; Next; end; end; finally lExcelApp.Workbooks[ 1 ].SaveAs( iFileName ); end; finally if not VarIsEmpty( lExcelApp ) then begin lExcelApp.DisplayAlerts := false; lExcelApp.Quit; lExcelApp := Unassigned; end; end; end;
- Soit tu passes par des composants tiers (voir dans la JVCL, TJvDbGridExcelExport)Envoyé par Harouache
- Soit tu le fais à la main en utilisant le fichier texte au format structuré (souvent on parle de fichier CSV), il y a plusieurs exemple dans le forum, fait une recherche avec le mot clef CSV tu trouveras ton bonheur
- Soit tu peux passer par les RecordSet d'ADO (si bien sur tu utilises ces composants ^^) pour générer un fichier CSV.
Il faut rajouter dans les uses de l'unité : ADOint
utlisation
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 procedure RecordSetToCsv (ARecordSet : _RecordSet;ColDelemiter,RowDelemiter,Filename : String); var lst : TStringList; i : integer; sTemp : String; begin With ARecordSet do begin lst := TStringList.Create; try MoveFirst; // obligatoire sinon la récupération des données ne se fera qu'a la position courante du curseur dans la base de données. lst.Text := GetString(adClipString,RecordCount,ColDelemiter,RowDelemiter,''); //Ajout de la liste des champs for i := 0 to Fields.Count -1 do sTemp := sTemp + Fields.Item[i].Name + ColDelemiter; lst.Insert(0,Copy(sTemp,1,Length(sTemp) - Length(ColDelemiter))); lst.SaveToFile(Filename); finally lst.Free; end; end; end;
- Et la solution de Dirk-Pitt qui nécessite toute fois l'installation d'Excell sur le poste (il me semble, Dirk-Pitt me corrigera si je me trompe ^^)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 RecordSetToCsv(AdoQuery1.Recordset,';',#13#10,'C:\test.csv'); RecordSetToCsv(AdoTable1.Recordset,';',#13#10,'C:\test.csv');
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
j'allais te proposer la méthode des fichiers texte avec séparateurs par point virgules et malatar la fait quand a moi j'utilise la grille de TMS j'ai même droit a une petit mise en forme (bordure,Couleur de remplissage...).
Au début j'utilisais également les fichiers CSV, mais un jour j'ai été coincé lorsque j'ai eu plus de 65535 lignes dans mon fichier. Je suis alors passé à un fichier XLS avec 65535 lignes par page maximum.
Un message digne d'intérêt sur le forum http://www.developpez.net/forums/showpost.php?p=2334410
Salut a vous tous;
Mr.Aityahya; je travail avec les tables paradox7.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager