Erro ao exportar para o excel
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
Curtidas 0
Respostas
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
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