Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Exportar Stringgrid a Excel (https://www.clubdelphi.com/foros/showthread.php?t=56668)

santipeich 23-05-2008 15:10:11

Exportar Stringgrid a Excel
 
Hola amiguetes,

Estoy haciendo un pequeño programa para mi empresa (ya lo tengo casi finiquitado) y me acaba de pedir mi jefe exportar todos los datos de las consultas generadas, que además las voy metiendo en un datagrid, a EXCEL :eek::confused:

He buscado y rebuscado en la documentacion de builder, he preguntado por otros foros y he googleado como un cabroncete, pero no consigo dar con la solución para C++ Builder. He encontrado algo para Delphi pero como mis conocimientos de programación son bastante bajos, pues no he sido capaz de hacer una conversión a c++ builder.

Si alguno de ustedes se encontró con la misma situación en la que me encuentro y me puede echar una manita se lo agradecería eternamente.

Gracias por vuestro tiempo

enecumene 23-05-2008 15:31:20

Hola, tal vez uno de los componentes de uno de los miembros del Club Delphi.com.ar, pueda realizar eso que propones, lo puedes encontrar aquí.

Saludos.

escafandra 24-05-2008 19:58:19

Una forma sencilla y elegante puede ser transportar "tablas" mediante el clipboard. Este sistema te permite copiar y pegar a otros programas y formatos.

Una tabla para Excel o Word tiene un formato en el clipboard asi:

Columna1 + "\t" + Columna2 + "\t".....Columna_n + "\t\n"+
.
.
Columna1 + "\t" + Columna2 + "\t".....Columna_n + "\t\n"

Así que el código para copiar al clipboard cualquier tabla, sería mas o menos así:

Código:

  Clipboard()->Clear();
  AnsiString Text;
  Text = Columna1 + "\t" + Columna2 + "\t".....Columna_n + "\t\n"+
  .
  .
  Columna1 + "\t" + Columna2 + "\t".....Columna_n + "\t\n";
  Clipboard()->AsText = Text;

Es otra idea. Espero que te sirva de ayuda.:rolleyes:
Saludos.

escafandra 09-06-2008 14:17:44

Bueno, pues navegando he encontrado esto, puede que también te sirva de ayuda....:rolleyes:


Saludos.

M@R!N@ 11-06-2008 01:55:12

Espero poder ayudarte
 
Hola que tal! yo igual pasé por una situación parecida y lo que hice fue lo siguiente: utilicé un objeto Ole...

El código es el siguiente:

//Necesitas primero crear un objeto que te permita acceder a excel, para eso declararemos las siguientes variables

Variant Excel,Libros,Libro,Hojas,Hoja; //Variant es un tipo de variable

//Con esto abres excel y lo haces visible
Excel=CreateOleObject("Excel.Application");
Excel.OlePropertySet("Visible",true);

//Ahora necesitas crear un acceso para acceder al objeto libro
Libros=Excel.OlePropertyGet("Workbooks");

//Para acceder a un libro en específico, por ejemplo el Libro1...(libro se refiere
//al archivo)
Libro=Libros.OlePropertyGet("Item",1);

//Ya que podemos acceder al libro, ahora necesitamos crear un acceso a las
//hojas
Hojas=Libro.OlePropertyGet("Worksheets");

//Ahora selecciono la hoja con la que quiero trabajar

Hoja=Hojas.OlePropertyGet("Item",1); //Aqui estoy agarrando la hoja 1

//tal vez esto te sirva también, por default se genera un archivo de tres
//hojas, si necesitas agregar más usa esta línea:

Hojas.OleProcedure("Add");

//Par etiquetar el nombre de las hojas

Hojas.OlePropertyGet("Item",1).OlePropertySet("Name","MiHoja");

//Ahora que ya tengo acceso a la hoja que quiero, puedo fácilmente
//manipular mis celdas...
//En este ejemplo, hoja se refiere a la hoja uno como se lo asignamos
//anteriormente, accedemos a su propiedad Cells, y donde dice ítem
//tiene otros dos parámetros(2 y 1) pues estos son las coordenadas de las
//celdas en excel (el 2 hace referencia a filas, el 1 es columnas, osea las letras), en value pues va lo que le quieras pasar a la celda, eso si en cadena

Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",2,1).OlePropertySet("Value",StringGrid1->Cells[0][0].c_str());

//este último código lo puedes meter en un for o algo así para pasarlo, en las
//coordenadas también pueden ir variables

Espero que te sirva de ayuda! Suerte!

M@R!N@ 11-06-2008 01:59:27

Otra cosa que se me olvidó que es importante, este código funciona si le agregas a tu formulario el componente OleContainer de la paleta System y... por si las dudas agrega esta librería <ComObj.hpp>

santipeich 12-06-2008 11:27:48

1000 Gracias Marina,

Tu expliación ha sido clara como el agua. Funciona perfecto!!
Gracias por contestar tan detalladamente mis dudas
Un abrazo!

M@R!N@ 13-06-2008 03:47:00

^_^ De Nada ^_^
 
Qué gusto el saber que te he sido de ayuda, no soy una experta, pero si tienes alguna duda o necesitas saber algo de eso, pues no dudes en avisarme, y te responderé si sé la respuesta, ^_^ hasta la próxima!

escafandra 13-06-2008 07:23:25

Bueno, no está mal. La única pega es que al usar Ole, el usuario debe tener instalado Excel. He encontrado una página que trae componentes para hacer la exportación nativa a Excel sin usar Ole: FireSoft ExportSuite

Saludos

M@R!N@ 15-06-2008 06:12:47

Bueno, eso si, es el pero de esta solución, pero bueno yo lo pondría como un requerimiento del sistema para el programa...
Aunque estaría muy bien checar lo que propones, me daré una vuelta para ver que onda, sería una gran solución para ese problema, gracias por el dato!! ^_^


La franja horaria es GMT +2. Ahora son las 13:08:32.

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