SoloCodigo

Programación General => C/C++ => Visual C++ => Mensaje iniciado por: carmamezo en Lunes 18 de Febrero de 2008, 13:35

Título: Crear Archivo Excel Mediante Ado
Publicado por: carmamezo en Lunes 18 de Febrero de 2008, 13:35
Hola a todos,
no sé si será este el mejor sitio para postear este asunto, si no lo es lo siento mucho. :unsure:
En fin, estoy haciendo un programa para sacar datos desde una base de datos SQL mediante ADO (usando la funcionalidad de #import para la libreria msado15.dll)... Hasta aqui ningún problema, el caso es que al mismo tiempo quiero exportar esos datos filtrados a un documento excel...  He conseguido abrir un excel que ya existe y escribir datos en él mediante JET OLEDB de microsoft sin problemas, pero me gustaría crear un nuevo documento excel por cada exportación....
¿Es posible crear un nuevo documento excel mediante la funcionalidad ADO y JET OLEDB? si es así, agradecería que me indicaseis cómo.

Un saludo.
 :lightsabre:
Título: Re: Crear Archivo Excel Mediante Ado
Publicado por: carmamezo en Miércoles 20 de Febrero de 2008, 15:42
Hola de nuevo,

Ya está resuelto, os dejo la solución que he encontrado por si alguien la necesita...

Para crear hojas de excel auomáticamente mediante ADO, se usan una serie de queries de SQL, para excel el proceso es el siguiente:

Conectar de la siguiente forma:
Código: Text
  1.  
  2. Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\nuevo_archivo.xls;Extended Properties=\"Excel 8.0;HDR=Yes\"
  3.  

Una vez conectados mediante Open(), hacemos una serie de llamadas nuevas a la función Open() pero agregando las queries:

Crear una hoja de cálculo en el nuevo libro (realmente una tabla):
Código: Text
  1. RsEXCEL->Open("Create Table Datos (V1 LONG, V2 LONG)",vtMissing,adOpenDynamic,adLockOptimistic,adCmdUnspecified);
  2.  
En este caso crearíamos una hoja en el libro con el nombre de Datos y dos columnas de datos llamadas V1 y V2...

Una vez creado el formato de la tabla no hay más que llamar sucesivamente a Open() con la query INSERT INTO:
Código: Text
  1. sqlquery="INSERT INTO Datos(V1, V2) VALUES (" + valor1 + ", " + valor2 + ")";
  2.       RsEXCEL->Open(sqlquery,vtMissing,adOpenDynamic,adLockOptimistic,adCmdUnspecified);
  3.  

Pues eso es todo, por si a alguien le interesa el mundo de las bases de datos mediante ADO hay un magnífico artículo enYerba mate y Visual C++ (http://www.dcp.com.ar)

Un saludo.
 :lightsabre: