GARANTIR DESCONTO

Fórum Exportação de dados para excel - data errada #463055

04/12/2013

0

Pessoal boa tarde!
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

Marcelo Vieira

Responder

Posts

05/12/2013

Deivison Melo

Veja esse exemplo simples...

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
Responder

Gostei + 0

05/12/2013

Marcelo Vieira

Me desulpe mas não entendi, não tem nenhuma codificação???? Não verdade a exportação para o excel funciona perfeitamente, só está transformando a data para o padrão inglês.

Obrigado.

Marcelo
Responder

Gostei + 0

05/12/2013

Deivison Melo

Porquê não formata?

Mesmo formatando ainda está dando problemas?
Responder

Gostei + 0

05/12/2013

Marcelo Vieira

Agora visualizei o código, estava em outro o internet explorer não mostrou, quanto a formatação, não encontrei nenhuma rotina que formate no momento da exportação. Conhece alguma que possa me fornecer.

Obrigado.

Marcelo
Responder

Gostei + 0

05/12/2013

Marcelo Vieira

Resolvido, apenas acrescentei as linhas abaixo na rotina :

planilha.Cells.Select;
planilha.Selection.NumberFormat := '@';
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar