Bonjour,
J'ai créé un bouton me permettant d'exporter le contenu de mon DBGrid vers Excel via un fichier.csv.
Le soucis se passe au moment de lire de fichier sous Excel. J'ai un message d'erreur :
Impossible de lire l'enregistremnt 1. Faut-il continuer de signaler chaque erreur ?
Le contenu de mon DBGrid sont des strings. Il doit bloquer sur une colonne.
Par exemple, dans mon DBGrid, la donnée se présente ainsi : 12345678901234567890123
Dans le fichier .csv : idem
Mais dans Excel, j'ai : 1,2345E+22
Voici mon code :
//Export vers Excel
//-----------------
procedure TListTiersSociete.btnExcelClick(Sender: TObject);
var
bm : TBookMark;
f : TextFile;
i : Integer;
//Pour ouvrir le fichier sous Excel :
aFileName : AnsiString;
vMSExcel,MaFeuille : variant;
vXLWorkbooks, vXLWorkbook, vUnused, vSeparator : variant;
begin
//Exportation du fichier
if not DirectoryExists(ExtractFilePath(Application.ExeName)+'Exports\') then
ForceDirectories(ExtractFilePath(Application.ExeName)+'Exports\');
SaveDialog1.InitialDir := ExpandFileName(ExtractFilePath(Application.ExeName)+'\Exports');
SaveDialog1.FileName := 'TiersSocietes.csv';
if SaveDialog1.Execute then
begin
bm := dbgTiers.DataSource.DataSet.GetBookmark;
dbgTiers.DataSource.DataSet.DisableControls;
try
AssignFile(f,SaveDialog1.FileName);
try
Rewrite(f);
for i := 0 to dbgTiers.Columns.Count-1 do Write (f,dbgTiers.Columns[i].Title.Caption+';');
WriteLn(f);
dbgTiers.DataSource.DataSet.First;
while not dbgTiers.DataSource.DataSet.Eof do
begin
for i := 0 to dbgTiers.Columns.Count-1 do
Write(f,dbgTiers.DataSource.DataSet.FieldByName(dbgTiers.Columns[i].FieldName).AsString+';');
WriteLn(f);
dbgTiers.DataSource.DataSet.Next;
end;
finally CloseFile(f);
end; //Finally
finally
dbgTiers.DataSource.DataSet.EnableControls;
dbgTiers.DataSource.DataSet.GotoBookmark(bm);
dbgTiers.DataSource.DataSet.FreeBookmark(bm);
end; //Finally
//Pour ouvrir le fichier sous Excel :
if MessageBox(Handle,PChar('Export réussi.'+#13+#13+'Voulez-vous le visualiser sous Excel ?'),PChar('Confirmation'),MB_YESNO+MB_ICONEXCLAMATION+MB_DEFBUTTON2+MB_APPLMODAL)=IDYES
then begin
try
try
vMSExcel := GetActiveOleObject('Excel.Application'); //On regarde si Excel est déjà lancé.
except
vMSExcel := CreateOleObject('Excel.Application'); //Si Excel n'est pas déjà lancé.
end;
vMSExcel.Visible := true; //Sinon on ne voit pas l'appli...
aFileName := SaveDialog1.FileName;
vUnused := unassigned;
vSeparator := 4;
vXLWorkbooks := vMSExcel.Workbooks;
vXLWorkbook := vXLWorkbooks.Open(aFileName, vUnused, vUnused, vSeparator);
MaFeuille := vXLWorkbook.Worksheets[1]; //as _worksheet;
MaFeuille.Columns[1].Font.Bold:=True; //Colonne titre en gras.
MaFeuille.Rows[1].Font.Bold:=True;
MaFeuille.Columns[1].HorizontalAlignment := xlLeft;
MaFeuille.Rows[1].HorizontalAlignment := xlHAlignCenter;
MaFeuille.Columns.AutoFit;
finally
//Il ne faut pas faire de Free des "Variant".
end;
end;
end;
end;
Merci de m'éclairer
!