Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problema exportando a Excel con Builder 2007

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problema exportando a Excel con Builder 2007 Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Juanma,

Me puedes dejar un ejemplo, escribiendo cualquier cosa en una celda.

Gracias.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Problemas en builder 2007 Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.