Criar um arquivo csv que pode ser aberto pelo excel, sem precisar de createoleobject
{A CommonTools7 possui um procedimento que é muito útil quando se precisa salvar um resultado de uma Query, de um módulo de memória, etc, em um arquivo CSV que pode ser aberto pelo Excel, SEM precisar de um CreateOleObject. Para isto usei um SaveDialog (Svd1). Chamei a procedure de "Exportar_para_CSV".} {OBS: É necessário que na USES esteja a: CommonTools7}
implementation
{$R *.dfm}
Procedure Exportar_para_CSV; Var
i : Integer;
F : TextFile;
Arquivo : string; Begin
Arquivo := ChangeFileExt( Form1.Svd1.FileName, '.CSV' );
AssignFile( F, Arquivo );
ReWrite( F ); // Cabeçalho For i := 0 To Pred( Form1.Query1.FieldCount ) DoBegin Write( F, Form1.Query1.Fields[ i ].FieldName ) ; If ( i < Pred( Form1.Query1.FieldCount ) ) Then Write( F, ';' ); End;
WriteLn( F ); While ( Not Form1.Query1.Eof ) DoBegin For i := 0 To Pred( Form1.Query1.FieldCount ) DoBegin Write( F, Form1.Query1.Fields[ i ].AsString ) ; If ( i < Pred( Form1.Query1.FieldCount ) ) Then Write( F, ';' ); End;
WriteLn( F );
Form1.Query1.Next; End;
Flush( F );
Close( F ); End;
{Depois basta chamar a Procedure no ponto em que você quiser. No meu caso em um button, testava se um checkbox (chkExportar) estava checado.}
if chkexportar.Checked then begin
Form1.Svd1.Execute;//Para abrir o SaveDialog
Exportar_para_CSV; end;