FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Que tal Cero, asi es, los datos los muestro en un DBGrid provenientes de una base de datos..
Probe el codigo q me pusiste, pero me tira este error: Le movi algunas cosas y salio peor, me marcaba un error ASSET...:S aqui te pongo como puse el codigo: Código:
//declaracion de variables Variant XL,v0,v1,v2,v3; //abres excel XL=Variant::CreateObject("excel.application"); //la abres con la ventana visivle o si tiene false la ventana es invisible XL.OlePropertySet("Visible", true); //abre el archivo C:\\mi_archivo.xls, se puede "SaveAs" en lugar de "Open" para crear en lugar de abrir XL.OlePropertyGet("Workbooks").OleProcedure("SaveAs", "C:\\mi_archivo.xls"); //abres la hoja1 en este caso llamada reporte v0=XL.OlePropertyGet("Sheets", "Reporte"); v1=v0.OlePropertyGet("Cells"); //aqui pones el nombre de las columnas que vas usar de la BD String columnas[19]={"Total_casos_colera", "cepas_positivasvibrio", "Total_muestrasproc", "Deter_cloro", "Total_detercloro", "ID_coberturadeteccion"," P_coberturadeteccion","ID_tratoportuno","P_tratoportuno","ID_eficiencialab","P_eficiencialab","ID_cloracionagua","P_cloracionagua","Año","Localidad","Trimestre"}; //qq es un query ya con una consulta hecha ADODataSet2->First(); for (int i = 1; i <= ADODataSet2->RecordCount; i++) { for (int ii = 0; ii < 19; ii++) { //se va escribiendo dato por dato v1.OlePropertyGet("Cells", i+4, ii+1).OlePropertySet("Value", ADODataSet2->FieldByName(columnas[ii])->AsString.c_str()); } //fin for i ADODataSet2->Next(); } //fin for ii XL.OlePropertySet("DisplayAlerts", false); XL.OleProcedure("Save"); XL=Unassigned; MessageBoxA(Handle, "listo vale", "", MB_ICONINFORMATION); Porque me marcara ese error..?? Saludos.. Última edición por Neftali [Germán.Estévez] fecha: 08-02-2010 a las 09:57:55. Razón: Añadida la imagen |
#2
|
|||
|
|||
Lo siento el código que te di era para abrir un xls ya creado con anterioridad, y meterle los datos (en mi opinión es mejor ya que puedes poner imágenes y darle un formato más agradable de una forma fácil).
Ahora para crear el xls desde cero solo se necesitarían unas pequeñas modificaciones que son: Código:
Variant XL,v0,v1; //quite variables que no se usan XL=Variant::CreateObject("excel.application"); XL.OlePropertySet("Visible", true); XL.OlePropertyGet("Workbooks").OleProcedure("Add"); //se agrega un libro //Aqui e se cambia Reporte por Hoja1 que es el nombre por defecto de las hojas de excel v0=XL.OlePropertyGet("Sheets", "Hoja1"); v1=v0.OlePropertyGet("Cells"); //DATOS// //se escriben los datos como ya lo haces v1.OlePropertyGet("Cells", 2/*cordenada y*/, 3/*cordenada x*/).OlePropertySet("Value", "lolo"); XL.OlePropertySet("DisplayAlerts", false); //aqui es donde se guarda XL.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs", "C:\\test.xlsx"/*xlsxpor que uso office 2007*/); XL=Unassigned; Pd2. Ese error da cuando se intenta acceder a una función que no existe, debido a que el manejo de “OleProcedure” es complejo no me di cuenta de los dos fallos del anterior código. Nos vemos y cuenta como te fue. Edito: en caso de que abras Excel de forma oculta, no se te olvide poner “XL.OleProcedure("Quit");” antes de “XL=Unassigned;” para cerrarlo, de lo contrario se quedara abierto y solo se serrara terminando el proceso en el administrador. Última edición por _cero_ fecha: 07-02-2010 a las 05:48:26. |
#3
|
|||
|
|||
Que tal Cero,le hice las modificaciones que me dijiste y ahora me sale este msj:
asi puse el codigo, no se si me haya equivocado en alguna parte... Código:
//declaracion de variables Variant XL,v0,v1,v2,v3; XL=Variant::CreateObject("excel.application"); XL.OlePropertySet("Visible", true); XL.OlePropertyGet("Workbooks").OleProcedure("Add"); v0=XL.OlePropertyGet("Sheets", "Hoja1"); v1=v0.OlePropertyGet("Cells"); //DATOS// //aqui pones el nombre de las columnas que vas usar de la BD String columnas[19]={"Total_casos_colera", "cepas_positivasvibrio", "Total_muestrasproc", "Deter_cloro", "Total_detercloro", "ID_coberturadeteccion"," P_coberturadeteccion","ID_tratoportuno","P_tratoportuno","ID_eficiencialab","P_eficiencialab","ID_cloracionagua","P_cloracionagua","Año","Localidad","Trimestre"}; //qq es un query ya con una consulta hecha ADODataSet2->First(); for (int i = 1; i <= ADODataSet2->RecordCount; i++) { for (int ii = 0; ii < 19; ii++) { //se va escribiendo dato por dato v1.OlePropertyGet("Cells", i+4, ii+1).OlePropertySet("Value", ADODataSet2->FieldByName(columnas[ii])->AsString.c_str()); } //fin for i ADODataSet2->Next(); } //fin for ii XL.OlePropertySet("DisplayAlerts", false); //aqui es donde se guarda XL.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs", "C:\\test.xlsx"/*xlsxpor que uso office 2007*/); XL.OleProcedure("Quit"); XL=Unassigned; MessageBoxA(Handle, "listo vale", "", MB_ICONINFORMATION); Saludos.. Última edición por Neftali [Germán.Estévez] fecha: 08-02-2010 a las 09:58:35. Razón: Añadida la imagen del error. |
#4
|
|||
|
|||
Pues hice un copy/paste del código y me va bien, y por más que lo intenté, no pude reproducir el error que te sale. Todo me va perfecto, la creación e inserción de datos en el xls.
Mi recomendación es que primero agás unas pruebas básicas sin meter el “ADODataSet2” simplemente mandando una cadena a una celda, puedes hacerlo copiando el código tal cual está en mi penúltimo mensaje, ese código manda la cadena “lolo” en la celda “C2”, si ese cacho si funciona entonces querrá decir que el problema está en otra parte, por el momento es lo que se me ocurre. |
#5
|
|||
|
|||
Que tal, sigue lo mismo...
y lo del codigo que me dijiste del value lolo, eso si funciona, ya lo habia hecho antes con valores de edit y labels...: D el problema va a estar a la hora de pasar los datos del adodataset, aunque no veo por donde...porque sustitui el adodataset por el adotable y siguio con el mismo error.. no hay otra manera de generar el reporte a excel?, quiza obtener los datos directo de la tabla sin necesidad de usar el DBGrid? pasar lo obtenido de la consulta directo a excel? o asi es como se esta haciendo? Saludos.. |
#6
|
|||
|
|||
Aquí no se está usando el DBGrid estamos pasando los datos directamente desde la base de datos, ahora ahí con intentos logre sacar un error que aparentemente no es el mismo pero eso quizás se deba a la versión del builder, y sale cuando no se convierte correctamente el tipo String a char* del campo, o sea cuanto escribes “.c_str()” yo uso “.t_str()” (podría ser eso).
Creo que hay otra forma de pasar los datos usando los componentes ADO y abriendo el libro de Excel como si fuera una mini base o algo así, desafortunadamente no sé nada de esta forma (solo la leí por ahí), así que no te podría ayudar en eso, la única forma que conozco y me funciona es la que te puse. |
#7
|
|||
|
|||
ooooooo, eso pense...
sobre lo de la conversion a string, si le pongo “.t_str()”, me marca error, diciendo que .t_str() no es parte del ANSIstring... : S Sabe si sera la version del builder, estoy usando la 6. habra q investigar esa manera q me mencionas, al igual, si sabes de alguna pagina, me avisas por favor.....( ; Sino funciona, creo que le voy a ligar unos edit y asi funciona a la segura, solo que el usuario tendria un poquito mas de trabajo, pero ni modo... Saludos...y gracias por tu ayuda...; ) |
#8
|
|||
|
|||
Gracias
Cita:
Mi codigo:
Última edición por giulichajari fecha: 01-07-2013 a las 19:08:48. Razón: Me olvide el codigo |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Exportar un DBGRID a excel con formato de fecha | Luis Castro | Varios | 3 | 21-01-2011 21:54:38 |
exportar a excel | rakka | Varios | 12 | 03-09-2008 00:53:31 |
Exportar un DBGRID a excel | luisneria | Varios | 4 | 16-03-2007 23:34:43 |
exportar dbgrid a excel | stuka | Varios | 7 | 21-07-2006 00:16:33 |
Exportar a Excel | pruz | Varios | 8 | 01-07-2004 15:47:37 |
|