Fórum Exportação de dados para excel - data errada #463055
04/12/2013
0
Utilizo a rotina abaixo para gerar uma tabela em excel, acontece que o campo de data quando vai para o excel a data fica no padrão inglês e ainda datas muito fora do intervalo da pesquisa, nunca vi isto acontecer Me ajudem por favor.
Uso: Delphi 7 e Firebird 1.5
//exportando dados
planilha := CreateoleObject('Excel.Application');
planilha.WorkBooks.Add(1);
planilha.caption := 'Exportação de dados';
planilha.visible := True;
linha := -1;
if not ibqRelExcel.IsEmpty then
for i := 0 to ibqRelExcel.FieldCount - 1 do
begin
planilha.cells[1,i+1] := ibqRelExcel.Fields[i].FieldName;
end;
ibqRelExcel.First;
while not ibqRelExcel.Eof do
begin
Inc(linha);
for i := 0 to ibqRelExcel.FieldCount -1 do
begin
planilha.cells[linha + 2,i+1] := ibqRelExcel.Fields[i].AsString;
end;
ibqRelExcel.Next;
end;
planilha.columns.Autofit;
Obrigado.
Marcelo
Marcelo Vieira
Curtir tópico
+ 0Posts
05/12/2013
Deivison Melo
Me conecto com o Excel através do componente nativo ADO e com isso não precisarei usar componentes activeX
ou aqueles da paleta office do delphi...
Código funcional e testado...
Veja se ele atenderá sua necessidade...
Crie um novo projeto no delphi e coloca na tela 03 componentes Button, 01 Memo, 01 Edit e 01 dbgrid.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, DB, ADODB, Buttons,
ComCtrls, DBXpress, FMTBcd, DBClient, Provider, SqlExpr, LMDPNGImage,
jpeg, dbexpint, midaslib;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Panel1: TPanel;
ADOQuery1: TADOQuery;
Edit2: TEdit;
Label2: TLabel;
BitBtn1: TBitBtn;
StatusBar1: TStatusBar;
Label3: TLabel;
Button1: TButton;
OpenDialog1: TOpenDialog;
ListBox1: TListBox;
SQLConnection1: TSQLConnection;
DataSetProvider1: TDataSetProvider;
ClientDataSet1: TClientDataSet;
BitBtn2: TBitBtn;
Timer1: TTimer;
Image1: TImage;
Image2: TImage;
SQLDataSet1: TSQLDataSet;
ClientDataSet1NOME: TStringField;
ClientDataSet1TELEFONE: TStringField;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure BitBtn2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure FetchData;
public
{ Public declarations }
end;
var
Form1: TForm1;
Transacao: TTransactionDesc;
implementation
uses uMensagens;
{$R *.dfm}
{ TForm1 }
procedure TForm1.FetchData;
begin
if not AdoConnection1.Connected then
Begin
ShowMessage('Primeiro abra uma planilha!');
Exit;
end;
if (Trim(Edit2.Text) = 'Digite a planilha desejada aqui') or (Trim(Edit2.Text) = '') then
begin
ShowMessage('Digite uma planilha no Campo : Planilha ');
Exit;
end;
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Text:='SELECT * FROM ['+Edit2.Text+']';
AdoQuery1.Open;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
FetchData;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
AdoConnection1.LoginPrompt:=False;
AdoQuery1.Connection:=AdoConnection1;
DataSource1.DataSet:=AdoQuery1;
DBGrid1.DataSource:=DataSource1;
SQLConnection1.Connected:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var strConn:String;
begin
OpenDialog1.Execute;
strConn:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ OpenDialog1.FileName+';Extended Properties=Excel 8.0;Persist Security Info=False';
AdoConnection1.Connected:=False;
AdoConnection1.ConnectionString:=strConn;
AdoConnection1.Open;
AdoConnection1.GetTableNames(ListBox1.Items,True);
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
Edit2.Text := ListBox1.Items.Strings[ListBox1.itemIndex];
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
StatusBar1.Panels[0].Text:=copy(TimeToStr(now),1,9);
StatusBar1.Panels[1].Text:=FormatDateTime('dddddd',Date);
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Application.MessageBox('Tem certeza que deseja sair?', 'Confirmação',
MB_ICONQUESTION+MB_YESNO)=IDNO then
CanClose:=False;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
strSQL: String;
begin
try
BitBtn1.Enabled:=false;
strSQL:='';
strSQL:='insert into NEW_TABLE (NOME, TELEFONE) values(:NOME, :TELEFONE)';
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
ClientDataSet1.Close;
strSQL := 'Insert into new_table(nome, telefone) Values(:nome, :telefone)';
ClientDataSet1.CommandText := strSQL;
ClientDataSet1.CreateDataSet;
ClientDataSet1.Insert;
ClientDataSet1.Params.ParamByName('nome').AsString := AnsiUpperCase(ADOQuery1.Fields[0].AsString);
ClientDataSet1.Params.ParamByName('telefone').AsString := AnsiUpperCase(ADOQuery1.Fields[1].AsString);
ADOQuery1.Next;
end;
ClientDataSet1.Execute;
ClientDataSet1.ApplyUpdates(0);
tFrmMensagens.Mensagem('Dados importados com sucesso!', 'I', [mbOk]);
finally
BitBtn1.Enabled:=true;
BitBtn2.Enabled:=False;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
SQLConnection1.Connected:=False;
end;
end.
PS. A tela desse código é composta por: [b]03 componentes Button´s[/b], [b]01 Memo[/b], [b]01 Edit[/b] e [b]01 grid[/b]!!
Abração e bons códigos!!
Emanoel Deivison
Recife - PE
Gostei + 0
05/12/2013
Marcelo Vieira
Obrigado.
Marcelo
Gostei + 0
05/12/2013
Deivison Melo
Mesmo formatando ainda está dando problemas?
Gostei + 0
05/12/2013
Marcelo Vieira
Obrigado.
Marcelo
Gostei + 0
05/12/2013
Marcelo Vieira
planilha.Cells.Select;
planilha.Selection.NumberFormat := '@';
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)