PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

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....



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

Gabriel Baltazar

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

if grid.Columns[i].DataBinding.ValueType = 'String' then
  planilha.Cells[linha, coluna].NumberFormat := '@';

Gabriel Baltazar

Gabriel Baltazar
Responder

Gostei + 1

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

Aceitar