Jump to content


Photo

[RESUELTO] ¿Es posible exportar desde IBDataSet a Excel (sin tener instalado Excel)?


  • Please log in to reply
10 replies to this topic

#1 ramonrafe

ramonrafe

    Member

  • Miembros
  • PipPip
  • 24 posts
  • LocationEspaña

Posted 05 November 2009 - 04:57 PM

Hola a tod@s.
¿Es posible exportar desde IBDataSet a Excel (sin tener instalado Excel)?.
Uso Delphi 7, IBExpress y Firebird 2.0
Me planteo exportar datos desde un IBDataset a una hoja de cálculo.
Supongo que el formato Excel es el más difundido. Por ello, creo que es el más adecuado.
Sin embargo, no tengo instalado Excel (uso OpenOffice.org) y he leido en un foro que tener instalado Excel es imprescindible. ¿Es así?.
¿Hay alguna forma de exportar con el formato Excel sin tener Excel instalado?.
En caso de que sea posible... cualquier ejemplo de código (indicando lo que hay que añadir en el Uses, si puede ser; sería muy bienvenido).
De antemano muchas gracias.
Ramón. :huh:

  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 05 November 2009 - 05:20 PM

Hola

hay un componente muy bueno realizado por Neftali miembro del foro ClubDelphi que hace esto que necesitas, desafortunadamente en este momento no está en funcionamiento la página donde puedes obtener estos componentes.

Te dejo el enlace a su página y espero que en breve esté de nuevo disponible.

http://neftali.clubd....com/?tag=excel

Salud OS
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 05 November 2009 - 05:24 PM

También aquí hay algo relacionado, pero no sé si es dependiente.

Saludos.
  • 0

#4 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 posts
  • LocationMéxico

Posted 05 November 2009 - 05:26 PM

En la página de MaxComponents hay un componente para exportar a Excel de forma nativa (no requiere tener instalado excel).

http://www.maxcompon...age=1&linkid=17

Esta página ya cerró sus puertas pero creo que aún se puede descargar el componente.

Saludos
  • 0

#5 ramonrafe

ramonrafe

    Member

  • Miembros
  • PipPip
  • 24 posts
  • LocationEspaña

Posted 06 November 2009 - 01:05 PM

Hola y gracias. :D
Me han dado pistas muy concretas
Así que voy a empezar probando con TmxNativeExcel de MaxComponents. Ya antes lo hice (sin éxito) con el ejemplo que me indica Enecumene y no he podido acceder a la página de Neftali.
Muchas gracias a todos.
Ramón.
  • 0

#6 ramonrafe

ramonrafe

    Member

  • Miembros
  • PipPip
  • 24 posts
  • LocationEspaña

Posted 06 November 2009 - 05:32 PM

Hola de nuevo. ;)
He instalado el componente TmxNativeExcel y he ejecutado el demo incluido, logrando lo que buscaba al iniciar este hilo.
Muchas gracias a todos.
Ramón.
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 06 November 2009 - 05:51 PM

Ah que bien, podemos asignar este hilo como [RESUELTO]

Salud OS
  • 0

#8 ramonrafe

ramonrafe

    Member

  • Miembros
  • PipPip
  • 24 posts
  • LocationEspaña

Posted 18 June 2010 - 11:18 AM

En este enlace hay un Unit que permite realizar facilmente una exportación de datos a formato excel sin tener excel instalado:
  http://cc.embarcadero.com/Item/13462

Pero hay  que estar registrado en Embarcadero para poder descargar...

Bueno, incluyo ese código con un poco de código de ejemplo:

Este es el código del Unit:
 

delphi
  1. unit Hoja_Calculo;
  2.  
  3. interface
  4.  
  5. uses
  6.   Classes ;
  7.  
  8.   procedure XlsBeginStream(XlsStream: TStream; const BuildNumber: Word);
  9.   procedure XlsEndStream(XlsStream: TStream);
  10.   procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
  11.     const AValue: string);
  12.   procedure XlsWriteCellNumber(XlsStream: TStream; const ACol,
  13.     ARow: Word; const AValue: Double);
  14.   procedure XlsWriteCellRk(XlsStream: TStream; const ACol, ARow: Word;
  15.     const AValue: Integer);
  16.  
  17.  
  18. var
  19.   CXlsBof  : array[0..5] of Word = ($809, 8, 00, $10, 0, 0);
  20.   CXlsEof  : array[0..1] of Word = ($0A, 00);
  21.   CXlsLabel : array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
  22.   CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);
  23.   CXlsRk    : array[0..4] of Word = ($27E, 10, 0, 0, 0);
  24.  
  25.  
  26. implementation
  27.  
  28.  
  29. procedure XlsBeginStream(XlsStream: TStream; const BuildNumber: Word);
  30. begin
  31. //  CXlsBof[4] := BuildNumber;
  32.   XlsStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
  33. end;
  34.  
  35. procedure XlsEndStream(XlsStream: TStream);
  36. begin
  37.   XlsStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
  38. end;
  39.  
  40.  
  41. procedure XlsWriteCellRk(XlsStream: TStream;
  42.                           const ACol, ARow: Word;
  43.                           const AValue: Integer);
  44. var
  45.   V: Integer;
  46. begin
  47.   CXlsRk[2] := ARow;
  48.   CXlsRk[3] := ACol;
  49.   XlsStream.WriteBuffer(CXlsRk, SizeOf(CXlsRk));
  50.   V := (AValue shl 2) or 2;
  51.   XlsStream.WriteBuffer(V, 4);
  52. end;
  53.  
  54. procedure XlsWriteCellNumber(XlsStream: TStream;
  55.                             const ACol, ARow: Word;
  56.                             const AValue: Double);
  57. begin
  58.   CXlsNumber[2] := ARow;
  59.   CXlsNumber[3] := ACol;
  60.   XlsStream.WriteBuffer(CXlsNumber, SizeOf(CXlsNumber));
  61.   XlsStream.WriteBuffer(AValue, 8);
  62. end;
  63.  
  64.  
  65. procedure XlsWriteCellLabel(XlsStream: TStream;
  66.                             const ACol, ARow: Word;
  67.                             const AValue: string);
  68. var
  69.   L: Word;   
  70. begin
  71.  
  72.   L := Length(AValue);
  73.   CXlsLabel[1] := 8 + L;
  74.   CXlsLabel[2] := ARow;
  75.   CXlsLabel[3] := ACol;
  76.   CXlsLabel[5] := L;
  77.   XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
  78.   XlsStream.WriteBuffer(Pointer(AValue)^, L);
  79.  
  80. end;
  81.  
  82. end.

Desde un form que tiene un RadioGroup1 (con 3 opciones: decimal, entero y texto) y un Button1.

Este es el evento OnClick de Button1:
 

delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   aa : string ;
  4.   FStream: TFileStream;
  5.   I, J: Integer;
  6. begin
  7.  
  8.   aa := ExtractFilePath( Application.ExeName ) + 'HojaCalculo_01.xls' ;
  9.  
  10.   FStream := TFileStream.Create( aa, fmCreate);
  11.  
  12.   try
  13.  
  14.     XlsBeginStream(FStream, 0);
  15.  
  16.     for I := 1 to strtoint ( Edit2.Text ) do      // Columnas
  17.       for J := 1 to strtoint ( Edit1.Text ) do    // Filas
  18.       begin
  19.  
  20.         case RadioGroup1.ItemIndex of
  21.           0: XlsWriteCellNumber(FStream, I, J, 34.34);
  22.           1: XlsWriteCellRk(FStream, I, J, 3434);
  23.           2: XlsWriteCellLabel(FStream, I, J, Format('Cell: %d,%d', [I, J]));
  24.         end;
  25.  
  26.       end;
  27.  
  28.     XlsEndStream(FStream);
  29.  
  30.   finally
  31.     FStream.Free;
  32.   end;
  33.  
  34.   // Si se quiere leer con una hoja de cálculo (por ej. OpenOffice.Org
  35.   ShellExecute(Handle,nil, PChar( aa ), '', '',SW_SHOWNORMAL) ;
  36.  
  37. end;

El Unit se guarda con el nombre que corresponda y se une al proyecto.

Desde el Form1 (que debe tener el Unit en el Uses), se hace click en el button1 y nada mas.

Bueno, espero que a alguien le sea tan útil como me lo ha resultado a mí.

Saludos.

Ramón.
  • 0

#9 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 18 June 2010 - 11:26 AM

Muchas gracias por la aportación mi estimado (y).

Saludos.
  • 0

#10 TMFV

TMFV

    Member

  • Miembros
  • PipPip
  • 40 posts

Posted 18 November 2021 - 02:08 PM

En este enlace hay un Unit que permite realizar facilmente una exportación de datos a formato excel sin tener excel instalado:
  http://cc.embarcadero.com/Item/13462

Pero hay  que estar registrado en Embarcadero para poder descargar...

Bueno, incluyo ese código con un poco de código de ejemplo:

Este es el código del Unit:
 


delphi
  1. unit Hoja_Calculo;
  2.  
  3. interface
  4.  
  5. uses
  6.   Classes ;
  7.  
  8.   procedure XlsBeginStream(XlsStream: TStream; const BuildNumber: Word);
  9.   procedure XlsEndStream(XlsStream: TStream);
  10.   procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
  11.     const AValue: string);
  12.   procedure XlsWriteCellNumber(XlsStream: TStream; const ACol,
  13.     ARow: Word; const AValue: Double);
  14.   procedure XlsWriteCellRk(XlsStream: TStream; const ACol, ARow: Word;
  15.     const AValue: Integer);
  16.  
  17.  
  18. var
  19.   CXlsBof  : array[0..5] of Word = ($809, 8, 00, $10, 0, 0);
  20.   CXlsEof  : array[0..1] of Word = ($0A, 00);
  21.   CXlsLabel : array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
  22.   CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);
  23.   CXlsRk    : array[0..4] of Word = ($27E, 10, 0, 0, 0);
  24.  
  25.  
  26. implementation
  27.  
  28.  
  29. procedure XlsBeginStream(XlsStream: TStream; const BuildNumber: Word);
  30. begin
  31. //  CXlsBof[4] := BuildNumber;
  32.   XlsStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
  33. end;
  34.  
  35. procedure XlsEndStream(XlsStream: TStream);
  36. begin
  37.   XlsStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
  38. end;
  39.  
  40.  
  41. procedure XlsWriteCellRk(XlsStream: TStream;
  42.                           const ACol, ARow: Word;
  43.                           const AValue: Integer);
  44. var
  45.   V: Integer;
  46. begin
  47.   CXlsRk[2] := ARow;
  48.   CXlsRk[3] := ACol;
  49.   XlsStream.WriteBuffer(CXlsRk, SizeOf(CXlsRk));
  50.   V := (AValue shl 2) or 2;
  51.   XlsStream.WriteBuffer(V, 4);
  52. end;
  53.  
  54. procedure XlsWriteCellNumber(XlsStream: TStream;
  55.                             const ACol, ARow: Word;
  56.                             const AValue: Double);
  57. begin
  58.   CXlsNumber[2] := ARow;
  59.   CXlsNumber[3] := ACol;
  60.   XlsStream.WriteBuffer(CXlsNumber, SizeOf(CXlsNumber));
  61.   XlsStream.WriteBuffer(AValue, 8);
  62. end;
  63.  
  64.  
  65. procedure XlsWriteCellLabel(XlsStream: TStream;
  66.                             const ACol, ARow: Word;
  67.                             const AValue: string);
  68. var
  69.   L: Word;   
  70. begin
  71.  
  72.   L := Length(AValue);
  73.   CXlsLabel[1] := 8 + L;
  74.   CXlsLabel[2] := ARow;
  75.   CXlsLabel[3] := ACol;
  76.   CXlsLabel[5] := L;
  77.   XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
  78.   XlsStream.WriteBuffer(Pointer(AValue)^, L);
  79.  
  80. end;
  81.  
  82. end.

Desde un form que tiene un RadioGroup1 (con 3 opciones: decimal, entero y texto) y un Button1.

Este es el evento OnClick de Button1:
 

delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   aa : string ;
  4.   FStream: TFileStream;
  5.   I, J: Integer;
  6. begin
  7.  
  8.   aa := ExtractFilePath( Application.ExeName ) + 'HojaCalculo_01.xls' ;
  9.  
  10.   FStream := TFileStream.Create( aa, fmCreate);
  11.  
  12.   try
  13.  
  14.     XlsBeginStream(FStream, 0);
  15.  
  16.     for I := 1 to strtoint ( Edit2.Text ) do      // Columnas
  17.       for J := 1 to strtoint ( Edit1.Text ) do    // Filas
  18.       begin
  19.  
  20.         case RadioGroup1.ItemIndex of
  21.           0: XlsWriteCellNumber(FStream, I, J, 34.34);
  22.           1: XlsWriteCellRk(FStream, I, J, 3434);
  23.           2: XlsWriteCellLabel(FStream, I, J, Format('Cell: %d,%d', [I, J]));
  24.         end;
  25.  
  26.       end;
  27.  
  28.     XlsEndStream(FStream);
  29.  
  30.   finally
  31.     FStream.Free;
  32.   end;
  33.  
  34.   // Si se quiere leer con una hoja de cálculo (por ej. OpenOffice.Org
  35.   ShellExecute(Handle,nil, PChar( aa ), '', '',SW_SHOWNORMAL) ;
  36.  
  37. end;

El Unit se guarda con el nombre que corresponda y se une al proyecto.

Desde el Form1 (que debe tener el Unit en el Uses), se hace click en el button1 y nada mas.

Bueno, espero que a alguien le sea tan útil como me lo ha resultado a mí.

Saludos.

Ramón.

 

 

Hola 

 

Esta   http://cc.embarcadero.com/Item/13462, no esta disponible, alguien sabe donde puedo descargar esa unit para implementarla en un codigo?


  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 19 November 2021 - 08:29 AM

Hola 

 

Esta   http://cc.embarcadero.com/Item/13462, no esta disponible, alguien sabe donde puedo descargar esa unit para implementarla en un codigo?

 

Hola

 

Si está disponible.

 

Saludos

Attached Files


  • 0




IP.Board spam blocked by CleanTalk.