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 

Problemillas Builder VS Excel

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problemillas Builder VS Excel Responder citando

Buenos dias.
Tengo que escribir unos datos en una hoja de excel. En estos momentos lo hago a traves de los métodos OlePropertyGet y OlePropertySet, pero resultan muy lentos, ¿Alguien conoce algun forma de hacer esto de forma rápida?.

Otra cosa: a la hora de guardar un libros de excel desde c++ builder, como hago para que no pida confirmación para sobreescribir un libro existente?.

Muchas gracias de antemano.
Saludos
Volver arriba
Mensaje    Asunto: Responder citando

Puedes utilizar los servidores integrados que viene con el builder, mira en la ayuda de este su utilización. Eso si, es un cliente COM, con lo que al final, utilizará la tecnología ole para generar el fichero.

En cuanto a guardar sin pedir confirmacion, se me ocurre:
Código:

xlBook.Exec(Procedure("Save") << "C:\Fichero.xls");


pero no lo he usado nunca.

Si tienes excel instalado, busca el fichero de ayuda XLMAIN9.CHM, al final del mismo, en "Información de porgramación", tienes todo lo relacionado con este tema.


Un saludo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Una forma de acelerar el envío de datos es hacerlo enviando grupos de celdas en vez de celda a celda. Como ejemplo vamos a enviar todo el contenido de un TStringGrid (StringGrid1) de una sola vez:
Código:
// Creamos el array donde copiaremos los datos a enviar
int bounds[4] = {0, StringGrid1->RowCount-1, 0, StringGrid1->ColCount-1};
Variant data = VarArrayCreate(bounds, 3, varVariant);

// Copiamos el contenido del StringGrid en el array
for (int y=0; y<StringGrid1->RowCount; y++)
    for (int x=0; x<StringGrid1->ColCount; x++)
        data.PutElement(StringGrid1->Cells[x][y], y, x);

//---> Usamos una instancia de excel abierta
Variant excel = GetActiveOleObject("Excel.Application");
Variant sheet = excel.OlePropertyGet("ActiveSheet");

// Seleccionamos el princio del rango
Variant range = sheet.OlePropertyGet("Range", "A1");

// Adaptamos el tamaño del rango a nuestro array
range = range.OlePropertyGet("Resize",
    StringGrid1->RowCount, StringGrid1->ColCount);

// Enviamos los datos del array
range.OlePropertySet("Value", data);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias _Leo, lo voy a probar ipso facto, a ver si me acelara el proceso.¿Sabes si con los servidores integrados que trae el builder mejora la comunicación?

Saludos.

P.D.: Ya he publicado otro mensaje con una temática similar. Perdón por las molestias.
Volver arriba
Mensaje    Asunto: Funciona Responder citando

Ya he probado lo de emplear arrays de Variant para enviar datos a excel y si que funciona si, y va mucho más rápido que cuando se escribe celda a celda.
Tambien funciona para importar datos.

saludos y gracias.
fabian__gc@hotmail.com
Volver arriba
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.