Erro ao exportar para o excel

Delphi

03/08/2011

Peguei uma aplicação para dar manutenção. Acontece que numa rotina de exportação para o excel, percebi que os campos Txte(Sql Server) aparecem na Planilha assim: Memo. Pela rotina, ele está passando para o Excel o que está no Grid(Foi o que eu entendi). O que eu preciso é fazer aparecer o campo na planilha(Campo tipo Text). Como eu faço? Abaixo o código.  
procedure TF_GeraGridExcel.FormShow(Sender: TObject);
var
  aCountCol: Integer;
  i:integer;
begin
 try
  AGridExcel := TDBGrid.Create(self);
  AGridExcel.DataSource:=Agrid.DataSource;
  for i:=0 to Agrid.Columns.Count-1
  do begin
     AgridExcel.Columns.Add;
     AGridExcel.Columns[i].Assign(Agrid.Columns[i]);
  end;
  // Supondo que já tem o grid com as columns..
  ClbColunas.Clear;
  for aCountCol := 0 to AGridExcel.Columns.count -1 do
    ClbColunas.Items.Add(AGridExcel.Columns[aCountCol].Title.Caption+' - '+
                         AGridExcel.Columns[aCountCol].FieldName);
  self.Height := PnlButtons.Height+(AGridExcel.Columns.count * clbColunas.ItemHeight)+PnlTodos.Height+30;
 finally
//  FreeAndNil(aGridExcel);
 end;
end;
 
 
function TF_GeraGridExcel.GerarGridNoExcel(ADBGrid : TDbgrid): boolean;
var
  ExcelExport: TOLEExcel;
begin
  result := TRUE;
  Screen.Cursor := crHourGlass;
  ExcelExport   := TOLEExcel.Create(Application);
  try
    ExcelExport.IgnoreFont := false;
    ExcelExport.TitleFont.Style := ExcelExport.TitleFont.Style + [fsBold];
    ExcelExport.CreateExcelInstance;
    ExcelExport.DBGridToExcel(AGridExcel);
    ExcelExport.Visible := True;
  finally
    FreeAndNil(ExcelExport);
    Screen.Cursor := crDefault;
  end;
end;
 
 
procedure TF_GeraGridExcel.CheckBox1Click(Sender: TObject);
var
  aCount: Integer;
begin
  for aCount := 0 to ClbColunas.Items.Count -1 do
    ClbColunas.Checked[aCount] := (not ClbColunas.Checked[aCount]);
  self.Height := PnlButtons.Height+(AGrid.Columns.count * clbColunas.ItemHeight)+PnlTodos.Height;
end;
procedure TF_GeraGridExcel.BtnGerarGridExcelClick(Sender: TObject);
var
  aCount,
  aCountMax  : Integer;
begin
  if CheckedCount(clbColunas) = 0 then
  begin
    MessageDlg('Marque pelo menos uma coluna',mtInformation,[mbOk],0);
    exit;
  end;
  for aCount :=0 to ClbColunas.Items.Count -1
  do begin
    if (not ClbColunas.Checked[aCount]) then
    begin
       AgridExcel.Columns[aCount].Visible:=FALSE;
    end;
  end;
  aCount := 0;
  aCountMax := AgridExcel.Columns.Count -1;
  while aCount <= aCountMax do
  begin
    if (not AgridExcel.Columns[aCount].Visible) then
    begin
        AgridExcel.Columns.Delete(aCount);
        dec(aCountMax);
    end
    else
      Inc(acount);
  end;
  try
   ExibeMensagem(emCria,'Gerando planilha Excel');
   GerarGridNoExcel(AGridExcel);
  finally
   ExibeMensagem(emDestroi);
   AGridExcel.Columns.Assign(Agrid.Columns);
  end;
end;
 
 
function TF_GeraGridExcel.CheckedCount(aCheckListBox : TCheckListBox): Integer;
var
  aCount: Integer;
begin
 result := 0;
 for aCount := 0 to aCheckListBox.Items.Count -1 do
   if aCheckListBox.Checked[aCount] then
     Inc(result);
end;
Pjava

Pjava

Curtidas 0

Respostas

Deivison Melo

Deivison Melo

03/08/2011

Porquê não troca a rotina por uma outra que faça a leitura diretamente do dataset?    
GOSTEI 0
Pjava

Pjava

03/08/2011

Fiz o que o Deivison sugeriu, mas apresentou um problema, que dependendo do tamanho da descrição pode ser ou não um problema. Como é um campo Text(Memo) ele possui o <ENTER>, ou seja, um | no final do arquivo. Até aí ok, mas se eu tiver um texto grande(ainda não tenho em meus testes), ele poderá ir colocando um pedaço em cada célula, aí sim, terei um problemão. Como eu retiro o <ENTER> que está no campo?
GOSTEI 0
POSTAR