FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
pasar datos a word
Hola como estas.
Bueno pues mi duda es la siguiente: He creado un programa de cálculo de Cargas térmicas para climatización y tengo todos los datos en la pantalla, mi duda es como los puedo pasar a una plantilla tipo tabla o a un documento word para podir imprimir una con todos los datos, gracias |
#2
|
||||
|
||||
Hola.
Bueno, si esos datos que tienes están almacenados en una base de datos, podrías utilizar los componentes QuickReport para imprimirlos. Si sencillamente los tienes en una variable (matriz) o en un StringGrid o algo similar, se me ocurre que podrías generar un archivo HTML que contenga una tabla (mira los puntos 21, 22 y 23) con los datos. Creo que también podrías utilizar TRichEdit para hacer un archivo RTF (aunque no sé si soportan tablas). Lo del formato de Microsft Office Word, ya es más complicadillo (usando objetos OLE, creo, pero eso ya no sé hacerlo). Salu2. |
#3
|
|||
|
|||
Pues la verdad los datos no los tengo en ninguna tabla, los meto por medio de tedit y hago los cálculos a partir de aqui...deberia meterlos en una tabla?
|
#4
|
||||
|
||||
No necesariamente. Según el método que quieras utilizar. Dices que tienes los datos en pantalla. ¿Dónde los tienes? ¿StringGird, Memo, Editsss...?
|
#5
|
|||
|
|||
Los datos los meto por medio de tedit los muestro con tlabel y tb los tengo en las variables internas para las operaciones.
|
#6
|
||||
|
||||
Variables internas... entonces no están en pantalla, ¿o sí? No está muy claro esto...
de todas formas, creo que lo que mejor le viene a esto es crear un fichero HTML que tenga una tabla con los datos. En el enlace que te puesto antes (ese que pone "mira") tienes un manual HTML para saber cómo se hace (por si no lo sabías ya). Salu2. |
#7
|
||||
|
||||
Cita:
Código:
// CREO EL DOCUMENTO A PARTIR DE UNA PLANTILLA QUE ABRO COMO SOLO LECTURA Variant word, doc; word = Variant::CreateObject("Word.Application"); word.OlePropertySet( "Visible", (Variant) true ); doc = word.OlePropertyGet("Documents"); if (FileExists(ExtractFilePath(Application->ExeName)+ "plantillas\\plantilla.doc")) { doc.OleFunction("Open", (ExtractFilePath(Application->ExeName)+ "plantillas\\plantilla.doc").c_str(), Unassigned, true); }else{ MessageBox(this->Handle, "El archivo no existe", "Error" , MB_APPLMODAL | MB_OK | MB_ICONERROR); word.OleProcedure("Quit"); return; } // CREO EL ENCABEZADO Variant Selection = word.OlePropertyGet("Selection"); Variant Font = Selection.OlePropertyGet("Font"); Variant Parrafo = Selection.OlePropertyGet("ParagraphFormat"); Parrafo.OlePropertySet("Alignment","1"); Font.OlePropertySet("Name","Verdana"); Font.OlePropertySet("Bold","1"); Font.OlePropertySet("Size","12"); Selection.OleProcedure("TypeText", "TÍTULO\r\r\r"); Parrafo.OlePropertySet("Alignment","0"); Font.OlePropertySet("Size","10"); Selection.OleProcedure("TypeText", "Nombre:\t"); Font.OlePropertySet("Bold","0"); Selection.OleProcedure("TypeText", (cboNombre->Text + "\r").c_str()); Font.OlePropertySet("Bold","1"); Selection.OleProcedure("TypeText", "Fecha:\t"); Font.OlePropertySet("Bold","0"); Selection.OleProcedure("TypeText", (txtFecha->Text + "\r\r").c_str()); // Lo anterior te generará ésto: // // TÍTULO // // Nombre: Gabo // Fecha: 03/12/2008 // // CREO LA TABLA doc = word.OlePropertyGet("ActiveDocument"); Variant rango = doc.OleFunction("Range"); rango.OleProcedure("Collapse", 0); Variant tablas = rango.OlePropertyGet("Tables"); int rows = ListView1->Items->Count + 1; // En este ejemplo creo tantas filas como ítemes en un ListView (+ 1 para los encabezados de columna) int cols = 2; Parrafo.OlePropertySet("Alignment","0"); Variant tabla = tablas.OleFunction("Add", rango, rows, cols); Variant celda; celda = tabla.OleFunction("Cell", 1, 1); celda.OlePropertyGet("Range").OleProcedure("InsertAfter", "Producto"); celda = tabla.OleFunction("Cell", 1, 2); celda.OlePropertyGet("Range").OleProcedure("InsertAfter", "Cantidad"); // A continuación recorro el ListView para ir poblando de datos la tabla for (int i=1; i <rows; i++) { for (int j=1; j <=cols; j++) { if (j==1) { celda = tabla.OleFunction("Cell", i+1, j); celda.OlePropertyGet("Range").OleProcedure("InsertAfter", (ListView1->Items->Item[i-1]->Caption).c_str()); }else{ celda = tabla.OleFunction("Cell", i+1, j); celda.OlePropertyGet("Range").OleProcedure("InsertAfter", (ListView1->Items->Item[i-1]->SubItems[0][0]).c_str()); } } } // Lo siguiente es para salir de la tabla y poder seguir insertando texto normal Selection.OleProcedure("EndKey", 6);
__________________
Saludos, Gabo A menos que se indique lo contrario, el código estará hecho en C++Builder. Última edición por Gabo fecha: 28-01-2008 a las 09:28:52. |
#8
|
||||
|
||||
Creo (no estoy demasiadao puesto en C++) que la traducción a Object Pascal sería:
Espero no haber cometido ningún error. Saludos. Última edición por ixMike fecha: 28-01-2008 a las 15:21:01. |
#9
|
||||
|
||||
Cita:
Si alguien puede probarlo con un ListView que tenga unos pocos datos cargados en tiempo de diseño... saldríamos de dudas. Gracias por la traducción...
__________________
Saludos, Gabo A menos que se indique lo contrario, el código estará hecho en C++Builder. |
#10
|
||||
|
||||
Bueno, en mi obsoleto Delphi 3 da algún que otro error.
Pero lo más importante: -Object or class type required (1ª línea) -En Pascal en casting se hace Variant (true) . (2ª línea) -(ExtractFilePath(Application.ExeName)+ 'plantillas\plantilla.doc').c_str en Pascal no tiene sentido alguno. -En el primer while me dice ";" expected but WHILE found. ¿Por qué? A partir de ahí hay errores que considero absurdos, como que j, cols y celda no están declaradas. ¿Alguien ve el fallo? |
#12
|
||||
|
||||
Cita:
P.D.: parece ser que el "ido" era por algo de etiquetas, porque al darle a "editar" aparecía bien escrito ¿? Última edición por ixMike fecha: 28-01-2008 a las 15:21:59. |
#13
|
||||
|
||||
A bueno ixMike eso es otra cosa... la verdad no he trabajado mucho con wordapplication pero creo que habria que mirar otras fuentes, yo encotre esto con ayuda del señor Google:
http://dn.codegear.com/article/10043 y el motor del club: http://www.clubdelphi.com/foros/show...ht=delphi+word Creo angelp4492 que deberias buscar un poco mas, a ver que encuentras...
__________________
Web |
#14
|
||||
|
||||
Cita:
Creo lo mismo, he puesto el código pero con el objetivo de fondo que investigue sobre las opciones que le dan los procedimientos OLE. Una búsqueda por palabras claves como : Código:
OleFunction('Add' OleProcedure('InsertAfter' OleProcedure('EndKey' Algunas de las páginas que visté cuando tuve que hacer lo de la tabla fueron (Ojo con la primera, está en ruso pero es muy buena): http://wladm.narod.ru/Borland/word.html http://www.djpate.freeserve.co.uk/AutoWord.htm#Tables http://www.mvp-access.com/softjaen/v...b05ofice01.htm http://www.willydev.net/descargas/wordc.pdf Sé que leí mucho más pero no tengo los enlaces, aunque buscando y rebuscando encontrarás lo que buscas.
__________________
Saludos, Gabo A menos que se indique lo contrario, el código estará hecho en C++Builder. Última edición por Gabo fecha: 28-01-2008 a las 17:11:11. |
#15
|
|||
|
|||
gracias a todos ya estoy probando todo esto.
Ahora me surge otra duda como guado los datos en un fichero...pero esto ya lo planteo en el foro asias. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Error al pasar texto e imagen a word | carlos gonzalez | Varios | 1 | 12-03-2007 21:05:04 |
Como pasar datos de una hoja de Excel a Bases de Datos de Paradox | Goyo | OOP | 1 | 06-02-2007 01:57:20 |
Pasar de String a Word | DarkByte | Varios | 4 | 09-08-2004 19:05:45 |
Alguien sabe cómo pasar parámetros a una plantilla Word?? | Muten | Servers | 2 | 01-04-2004 00:07:43 |
Recoger datos de Word | RaulChemical | Impresión | 0 | 01-10-2003 16:23:34 |
|