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
Curtir tópico
+ 0
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
Clique aqui para fazer login e interagir na Comunidade :)