Fórum Erro na exportação Excel #442838
14/05/2013
0
Fiz uma rotina que pega os dados de um cxGrid e exporta pro Excel.
Essa exportação funciona quase que perfeitamente sendo que quando exporto um campo String contendo apenas números, o excel converte esse valor para um número louco.
Exemplo: Se eu exportar o CNPJ = 12345678901234, no excel vai o valor 1,23457E+13.
Como posso contornar isso?
Segue abaixo minha rotina....
Essa exportação funciona quase que perfeitamente sendo que quando exporto um campo String contendo apenas números, o excel converte esse valor para um número louco.
Exemplo: Se eu exportar o CNPJ = 12345678901234, no excel vai o valor 1,23457E+13.
Como posso contornar isso?
Segue abaixo minha rotina....
procedure TExportacao.exportarParaExcel(grid: TcxGridTableView; dataSet: TADODataSet; caption : TCaption);
var
planilha : variant;
i, coluna, linha : Integer;
nomeDoCampo : String;
begin
try
dataSet.DisableControls;
planilha := CreateOleObject('Excel.Application');
planilha.Caption := caption;
planilha.Visible := False;
planilha.WorkBooks.add(1);
planilha.Columns.AutoFit;
planilha.Visible := True;
///////////////////////////////////////////////////////////////////////////
/// Preenchendo o Cabeçalho /
///////////////////////////////////////////////////////////////////////////
coluna := 1;
linha := 1;
for i := 0 to grid.ColumnCount - 1 do
begin
if grid.Columns[i].Visible then
begin
planilha.Cells[linha, coluna] := grid.Columns[i].Caption;
planilha.Cells[linha, coluna].Font.Bold := True;
planilha.Cells[linha, coluna].Borders.LineStyle := 1;
Inc(coluna, 1);
end;
end;
///////////////////////////////////////////////////////////////////////////
/// Preenchendo o Corpo
///////////////////////////////////////////////////////////////////////////
linha := 2;
dataSet.First;
while not dataSet.Eof do
begin
coluna := 1;
for i := 0 to grid.ColumnCount - 1 do
begin
if grid.Columns[i].Visible then
begin
nomeDoCampo := Copy(grid.Columns[i].Name, length(grid.Name) + 1, length(grid.Columns[i].Name));
planilha.Cells[linha, coluna].Borders.LineStyle := 1;
planilha.Cells[linha, coluna] := dataSet.FieldByName(nomeDoCampo).Value;
Inc(coluna, 1);
end;
end;
Inc(linha, 1);
dataSet.Next;
end;
planilha.Columns.AutoFit;
planilha.Visible := True;
dataSet.EnableControls;
except
MensagemDeDialogo('Erro ao Exportar para o Excel.', MB_OK + MB_ICONERROR);
end;
end;
Gabriel Baltazar
Curtir tópico
+ 0
Responder
Post mais votado
14/05/2013
Consegui converter a célula pra texto, fiz o seguinte:
Faço uma verificação no tipo do campo, se ele for String eu uso o numberFormat pro excel tratá-lo como texto
Faço uma verificação no tipo do campo, se ele for String eu uso o numberFormat pro excel tratá-lo como texto
if grid.Columns[i].DataBinding.ValueType = 'String' then planilha.Cells[linha, coluna].NumberFormat := '@';
Gabriel Baltazar
Responder
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)