Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error al generar excel (https://www.clubdelphi.com/foros/showthread.php?t=75181)

Paulao 03-08-2011 16:34:41

Error al generar excel
 
Esta aplicacion, quando me voy a generar una planilla Excel, me lo da un error asi: Los campos Text(Sql Server) no si muestra en la planilla, ellos si muestram asi: [Memo]. No se porque. Abajo estan los codigos que generan los archivos Excel.


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;


oscarac 03-08-2011 16:37:24

y que mensaje de error sale?

Paulao 03-08-2011 17:41:17

No sale mensaje, solamente que en el Excel, no viene nada en el campo Descricao, apenas la palabra [Memo], asi como estás. Y el campo tiene valor, ejemplo: 555905-02, esto es solo un ejemplo.

Paulao 03-08-2011 17:56:17

Yo cambie la forma de alimentar el Grid y funciono, o sea, yo pase el DataSet y no el Grid como estava y asi funciono, pero hay un problema. Como es un campo Text, hay <ENTER>. En un texto pequeño como el que yo tengo, ok, pero si for un campo con muchos Enter's, entonces es posible del excel poner cada palavra en un celda, lo que me traria un gran problema. Como rmover estes Enter's? Gracias. Me lo dijeron que son los valores #$D#$A, pero no se como si lo hace.

Paulao 03-08-2011 21:16:19

Ahora me lo trae todo, pero me gustaria de traer solamente los campos selecionados en unos CheckBoxes, pero ele me lo trae todo lo estas en el DataSet. No consigo traer solo los marcados. Abajo los codigos:

Código Delphi [-]
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;

var
  ExcelExport: TOLEExcel;
  i: integer;
begin
  result := TRUE;
  Screen.Cursor := crHourGlass;
  ExcelExport   := TOLEExcel.Create(Application);
  try
    ExcelExport.IgnoreFont := false;
    ExcelExport.TitleFont.Style := ExcelExport.TitleFont.Style + [fsBold];
    ExcelExport.CreateExcelInstance;
    ExcelExport.DataSetToExcel(AGridExcel.DataSource.DataSet);
    //ExcelExport.DBGridToExcel(AGridExcel);
    ExcelExport.Visible := True;
  finally
    FreeAndNil(ExcelExport);
    Screen.Cursor := crDefault;
  end;
end;


La franja horaria es GMT +2. Ahora son las 23:12:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi