Fórum Erro ao exportar para o excel #405932

03/08/2011

0

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

Responder

Posts

03/08/2011

Deivison Melo

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

Gostei + 0

03/08/2011

Pjava

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?
Responder

Gostei + 0

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

Aceitar