 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Fabian Invitado
|
Publicado: Mar 06 Jul, 2004 7:34 pm Asunto: Problemillas Builder VS Excel |
|
|
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 |
|
 |
rayder Master

Registrado: 03 Mar 2004Mensajes: 207
|
Publicado: Mie 07 Jul, 2004 7:33 am Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 08 Jul, 2004 2:38 am Asunto: |
|
|
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 |
|
 |
Fabian13 Invitado
|
Publicado: Mar 13 Jul, 2004 12:09 pm Asunto: |
|
|
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 |
|
 |
Fabian13 Invitado
|
Publicado: Mie 14 Jul, 2004 7:41 pm Asunto: Funciona |
|
|
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 |
|
 |
|
|
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.
|