 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 24 Abr, 2008 10:01 am Asunto: Problema exportando a Excel con Builder 2007 |
|
|
Hola a todos,
Con un codigo que encontre por aqui exporto a Excel perfectamente, el problema a venido cuando cambie a Builder 2007 y en esta linea:
xlApp.Exec(PropertySet("Visible") << true);
Que por cierto en Builder 6 va perfectamente en el 2007 da un error de Access Violation.
Sabeis por que? han cambiado cosas del BCB 6 al 2007 en cuanto a temas de Excel?
Un abrazo.
Carlos[/list] |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Jue 24 Abr, 2008 4:04 pm Asunto: |
|
|
Yo no he tenido problemas para exportar datos a excel en 2007, aunque yo lo tengo:
| Código: | vXls.OlePropertySet("Visible", true); |
siendo vXls un Variant
| Código: | vXls = Variant::CreateObject("Excel.Application"); |
Hasta ahora he realizado muchos tipos de exportación (datos, formatos, colores, lineas) y no he tenido problemas. |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Vie 25 Abr, 2008 11:06 am Asunto: |
|
|
Juanma,
Me puedes dejar un ejemplo, escribiendo cualquier cosa en una celda.
Gracias.
Carlos |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Vie 25 Abr, 2008 2:25 pm Asunto: |
|
|
Intentaré poner el código algo entendible, ya que yo para exportar a excel me creé una clase (de este foro consiguí bastante codigo) similas a como trabajaba yo con anterioridad en VBasic.
He de decir que al principio intenté usar unos componente que parece que trae el builder para office, pero tras mis pruebas, saque la conclusión de que al instalar el builder es mejor no poner nada de eso.
Para mi exportar a excel es algo similar a:
| Código: | void __fastcall TfStdVE::ToExcel()
{
int nr;
CLXLS xls; //Clase que me inicializa los variant
if (!xls.lVo) { return; }
xls.FontSet(1, 1, 1);
xls.CellsVal(1, 1, Caption);
xls.CellsVal(2, 1, "Agencia");
//... etc, al salir de la funcion en el destructor de la clase la pone visible
|
He de decir, que esta clase está adaptada justo a lo que yo necesito, y por eso tanto el constructor como el destructor hacen lo que hacen...
Pongo aqui parte de la clase que es algo larga
| Código: | //donde la defino
class CLXLS {
Variant vXls, vBks, vSht;
public:
//...
//el constructor para que veas la relación en los variant
vXls = Variant::CreateObject("Excel.Application");
vBks = vXls.OlePropertyGet("Workbooks");
vBks.OleProcedure("Add");
//nH = 1;
vBks.OlePropertyGet("Item", 1).OlePropertyGet("Worksheets").
OlePropertyGet("Item", 1).OlePropertySet("Name", "Hojilla1");
vSht = vBks.OlePropertyGet("Item", 1).OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);
//el destructor donde la hago visible
vXls.OlePropertySet("Visible", true);
vXls = Variant::NoParam(); //Unassigned;
//y el codigo que me pides de como asigno valores a una celda
void CLXLS::CellsVal(int y, int x, String cV)
{
if (y < 1) y = 1;
if (x < 1) x = 1;
vSht.OlePropertyGet("Cells").OlePropertyGet("Item", y, x).OlePropertySet("Value", cV.c_str());
}
|
Creo que todo lo necesario para entenderlo está, espero que te sirva |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Lun 28 Abr, 2008 11:16 am Asunto: |
|
|
Perfecto,
Entre lo que habia por aqui y lo que me has enviado me a funcionado perfecto, he hecho un par de funciones para datos y otro para un grid de texto, voy a ponerlo en Tips para que le valga a todo el mundo.
Muchas gracias por tu ayuda.
Carlos |
|
| Volver arriba |
|
 |
jotny Master


Registrado: 17 Feb 2004Mensajes: 226Ubicación: santiago
|
Publicado: Mar 11 Nov, 2008 7:38 pm Asunto: Problemas en builder 2007 |
|
|
Hola a todos.
Tengo una aplicacion que corria muy bien en builder 6.0 y al cambiarme a builder 2007 tengo problemas con las exportaciones a excel o a word.
// CREACION DE LIBRO EN EXCEL
| Código: | Variant vExcel=CreateOleObject("Excel.Application");
vExcel.OlePropertySet("Visible",false);
Variant xlLibros=vExcel.OlePropertyGet("Workbooks");
xlLibros.OleProcedure("Add");
Variant vLibro = xlLibros.Exec(PropertyGet("Item") << 1); |
En la ultima linea, en tiempo de ejecucion, me manda un error "access violation at address 004B1772 in module....", no comprendo ya que esa instruccion funcionaba muy bien en b6.
invalid pointer operation en el caso cuando quiero hacer un reemplazo en word
// REEMPLAZO EN WORD
| Código: | Variant vDocumentos, vDocumento, vSeleccion, vBuscar;
vSeleccion = vWord.OlePropertyGet( "Selection" );
vSeleccion.OlePropertyGet( "Range" ).OleProcedure( "SetRange", 0, 0 );
vBuscar = vSeleccion.OlePropertyGet( "Find" );
vBuscar.OleProcedure( "ClearFormatting" );
vBuscar.OlePropertyGet( "Replacement" ).OleProcedure( "ClearFormatting" );
vBuscar.Exec( Procedure( "Execute" )
<< Etiqueta.c_str() // Texto a buscar
<< VT_EMPTY // Coincidir mayusculas y minusculas
<< VT_EMPTY // Solo palabras completas
<< VT_EMPTY // Usar caracteres comodin
<< VT_EMPTY // Suena como
<< VT_EMPTY // Todas las formas de la palabra
<< true // Hacia adelante
<< VT_EMPTY // Wrap
<< VT_EMPTY // Format
<< Dato.c_str() // Reemplazar con...
<< 2 // 2 = reemplazar todo
); |
al momento de ejecutarse la ultima instruccion para reemplazo de texto en word, la que hará el reemplazo efectivo del texto, me manda errores de punteros etc.
Que puede estar pasando?, probé ejecutando la aplicacion como administrador pero pasa lo mismo, no se que hacer.... |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 11 Nov, 2008 8:31 pm Asunto: |
|
|
| jotny escribió: | | // CREACION DE LIBRO EN EXCEL |
Cambia la última línea por la siguiente:
| Código: | Variant vLibro = xlLibros.OlePropertyGet("Item", 1); |
| jotny escribió: | | // REEMPLAZO EN WORD |
Y en el segundo caso cámbiala por:
| Código: | vBuscar.OleProcedure("Execute",
Etiqueta.c_str(), // Texto a buscar
VT_EMPTY, // Coincidir mayusculas y minusculas
VT_EMPTY, // Solo palabras completas
VT_EMPTY, // Usar caracteres comodin
VT_EMPTY, // Suena como
VT_EMPTY, // Todas las formas de la palabra
true, // Hacia adelante
VT_EMPTY, // Wrap
VT_EMPTY, // Format
Dato.c_str(), // Reemplazar con...
2 // 2 = reemplazar todo
); |
(Tienes que revisar todas las líneas donde uses ".Exec" y sustituirlo por la correspondiente "Ole...") |
|
| 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.
|