 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Mar 03 Feb, 2009 1:30 pm Asunto: Automatización OLE Word |
|
|
Buenas,
He estado buscando por el foro el tema de la automatización word y no he encontrada nada sobre crear un documento de la nada y guardar en él datos de un edit, memo, stringrid..
Entre la semejanza con el excel y lo que he visto he llegado a esto:
| Código: | Variant Word, Documento, vDocumento, wordRange;
String sFicheroWord = "word2.doc";
//Crear un instancia en word
Word = CreateOleObject("Word.Application");
Word.OlePropertySet("Visible", false);
//Abrir el documento
Documento = Word.OlePropertyGet("Documents");
Documento.OleProcedure("Add");
Documento.OleFunction("Item", 1);
//Obtenemos la posicion del principio del documento
//wordRange = Documento.OleFunction("Range");
//wordRange.OleProcedure("Collapse", 1);
[...]
//Cerrar documento
Documento.OleProcedure("SaveAs", sFicheroWord.c_str());
Documento.OleProcedure("Close", 0xFFFFFFFF);
Word.OleProcedure("Quit");
Word = Documento, vDocumento, wordRange = Unassigned;
|
Al ejecutar, me dice que "nombre desconocido"
¿Alguien me podría mostrar un ejemplo sobre la exportación a word por ejemplo del contenido de un Edit? Algo sencillo con que empezar.
Gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 03 Feb, 2009 3:50 pm Asunto: |
|
|
| Código: | Variant Word, Documentos, Documento, Seleccion;
String sFicheroWord = "word2.doc";
Word = CreateOleObject("Word.Application");
Word.OlePropertySet("Visible", false);
Documentos = Word.OlePropertyGet("Documents");
Documento = Documentos.OleFunction("Add");
Seleccion = Word.OlePropertyGet("Selection");
Seleccion.OleProcedure("TypeText", Edit1->Text.c_str());
Seleccion.OleProcedure("TypeParagraph");
Seleccion.OleProcedure("TypeText", "Otro parrafo");
Documento.OleProcedure("SaveAs", sFicheroWord.c_str());
Documento.OleProcedure("Close", 0xFFFFFFFF);
Word.OleProcedure("Quit");
Word = Documentos = Documento = Seleccion = Unassigned(); |
|
|
| Volver arriba |
|
 |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Mie 04 Feb, 2009 9:15 am Asunto: |
|
|
Gracias _Leo.
He modificado un trozo de código a:
| Código: |
Seleccion = Word.OlePropertyGet("Selection");
Seleccion.OleProcedure("TypeText", "prueba");
int w;
for (w = 0; w<this>TreeView->Items->Count; w++)
{
Seleccion.OleProcedure("TypeParagraph");
Seleccion.OleProcedure("TypeText", this->TreeView->Items->Item[w]->Text.c_str());
} |
Quiero pasar el contenido de un TreeView a Word pero distinguiendo entre padres e hijos mediante viñetas en el word algo como:
En TreeView
padre1
hijo1
padre2
padre3
hijo3
a word
-padre1
------hijo1
y asi sucesivamente.
Como lo tengo así en el código me los muestras linea tras linea, pero no encuentro una relación para distinguirlos. Luego, ¿como introduzco el estilo viñetas en código para que me lo muestre en word? |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 08 Feb, 2009 6:08 am Asunto: |
|
|
Utilizando viñetas es más complicado y además tiene un límite de niveles. Te sirve así ?:
| Código: | Variant Seleccion = Word.OlePropertyGet("Selection");
// Pasamos todo el contenido del TreeView a una cadena
std::auto_ptr<TStringStream> ss(new TStringStream(""));
TreeView1->SaveToStream(ss.get());
// Reemplazamos los caracteres de nueva línea por el
// carácter ASCII 11 (nueva línea dentro del mismo párrafo)
TReplaceFlags rf = TReplaceFlags() << rfReplaceAll;
String str = StringReplace(ss->DataString, "\r\n", "\x0b", rf);
// Reemplazamos los tabuladores por "----" (opcional)
str = StringReplace(str, "\t", "----", rf);
Seleccion.OleProcedure("TypeText", str.c_str()); |
o así: | Código: |
Variant Seleccion = Word.OlePropertyGet("Selection");
Seleccion.OleProcedure("TypeParagraph");
for (int w = 0; w < TreeView1->Items->Count; w++)
{
TTreeNode* node = TreeView1->Items->Item[w];
// Según el nivel en el TreeView añadimos tantos tabuladores
Seleccion.OleProcedure("TypeText", String::StringOfChar('\t', node->Level));
// Insertamos el caracter comunmente usado para las viñetas
Seleccion.OleProcedure("TypeText", WideString((wchar_t)0x2022));
// El texto..
Seleccion.OleProcedure("TypeText", node->Text.c_str());
// Nueva línea
Seleccion.OleProcedure("TypeText", WideString("\x0b"));
}
Seleccion.OleProcedure("TypeParagraph"); |
|
|
| Volver arriba |
|
 |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Lun 09 Feb, 2009 10:01 am Asunto: |
|
|
Hola _Leo
he probado ambas, en la primera me da un error al compilar con primer mensaje:
[C++ Error] appSniffer.cpp(1364): E2316 'auto_ptr' is not a member of 'std'
y en el segundo lo he colocado de esta manera entre el código:
| Código: | Variant Word, Documentos, Documento, Seleccion;
Variant Tablas, Tabla, Rango;
Variant borders, border;
String sFicheroWord = "word2.doc";
Word = CreateOleObject("Word.Application");
Word.OlePropertySet("Visible", false);
Documentos = Word.OlePropertyGet("Documents");
Documento = Documentos.OleFunction("Add");
Seleccion = Word.OlePropertyGet("Selection");
Seleccion.OlePropertyGet("Font").OlePropertySet("Size",14);
Seleccion.OlePropertyGet("Font").OlePropertySet("Color",clBlue);
Seleccion.OleProcedure("TypeText", "Información del Sistema");
Seleccion = Word.OlePropertyGet("Selection");
//Pasar la letra a 10
Seleccion.OlePropertyGet("Font").OlePropertySet("Size",10);
Seleccion.OlePropertyGet("Font").OlePropertySet("Color",clBlack);
Seleccion.OleProcedure("TypeParagraph");
int w;
for (w = 0; w<this>TreeView->Items->Count; w++)
{
// Según el nivel en el TreeView añadimos tantos tabuladores
Seleccion.OleProcedure("TypeText", String::StringOfChar('\t', this->TreeView->Items->Item[w]->Level));
// Insertamos el caracter comunmente usado para las viñetas
Seleccion.OleProcedure("TypeText", WideString((wchar_t)0x2022));
//Seleccion.OleProcedure("TypeParagraph");
Seleccion.OleProcedure("TypeText", this->TreeView->Items->Item[w]->Text.c_str());
// Nueva línea
Seleccion.OleProcedure("TypeText", WideString("\x0b"));
}
Seleccion.OleProcedure("TypeParagraph");
Seleccion.OlePropertyGet("Font").OlePropertySet("Color",clBlue);
Seleccion.OlePropertyGet("Font").OlePropertySet("Size",14);
Seleccion.OleProcedure("TypeText", "Estadísticas Generales");
Seleccion.OlePropertyGet("Font").OlePropertySet("Color",clBlack);
Seleccion.OlePropertyGet("Font").OlePropertySet("Size",10);
//Obtenemos la posicion del final del documento
Rango = Documento.OleFunction("Range");
Rango.OleProcedure("Collapse", 0);
//Creamos la tabla
[...] |
compila bien, pero me da una excepción en la clase OleSysError de tipo de variable incorrecto.
Gracias de antemano. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 09 Feb, 2009 6:02 pm Asunto: |
|
|
| zankiu escribió: | | [C++ Error] appSniffer.cpp(1364): E2316 'auto_ptr' is not a member of 'std' |
Tienes que añadir: #include<memory>
| zankiu escribió: | | da una excepción en la clase OleSysError de tipo de variable incorrecto |
Cambia la siguiente línea: | Código: | Seleccion.OleProcedure("TypeText", String::StringOfChar('\t', this->TreeView->Items->Item[w]->Level)); | por: | Código: |
Seleccion.OleProcedure("TypeText", String::StringOfChar('\t', this->TreeView->Items->Item[w]->Level).c_str()); |
|
|
| Volver arriba |
|
 |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Mar 10 Feb, 2009 9:51 am Asunto: |
|
|
Te lo agradezo mucho, va perfecto, no tenía la librería pero creo que el fallo estaba en que tenía poner:
| Código: | Seleccion.OleProcedure("TypeText", String::StringOfChar('\t', this->TreeView->Items->Item[w]->Level).c_str()); |
muchas gracias. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|