 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Mónica Cmdr

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Mie 29 Jun, 2005 9:52 am Asunto: Ayuda: Gráficas en excel (2ª parte) |
|
|
Gracias a la ayuda de _Leo ya salen las gráficas tal y como quería.
Ahora estoy puliendo un poquito los detalles y lo que me trae de cabeza es lo siguiente: le paso los valores del eje X, los cuales tengo copiados en la columna A de una hoja. Bien, éso conseguí hacerlo de la siguiente manera:
| Código: |
RangoX=Hoja.OlePropertyGet("Range","A1:A512");
...
Variant Serie=ColeccionSeries.OlePropertyGet("Item",1);
Serie.OlePropertySet("XValues",RangoX);
|
Pero viendo el resultado, preferiría que en lugar de que aparecieran todos los valores numéricos del eje X, aparecieran solo el primero, el del medio y el último. Lo intenté haciéndolo así:
| Código: |
Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,4).OlePropertySet("Value",DatosGraf.Valores_frecuencia[0]); Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",2,4).OlePropertySet("Value",DatosGraf.Valores_frecuencia[256]); Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",3,4).OlePropertySet("Value",DatosGraf.Valores_frecuencia[511]);
RangoX=Hoja.OlePropertyGet("Range","D1:D3");
Variant Serie=ColeccionSeries.OlePropertyGet("Item",1);
Serie.OlePropertySet("XValues",RangoX);
|
Pero lo único que sale es el último valor colocado al principio de todo.
A ver si alguien tiene la solución (_Leo... no miro a nadie)
Gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 29 Jun, 2005 2:56 pm Asunto: |
|
|
En vez de en D1, D2 y D3, podrías poner los valores en D1, D256 y D512 y luego pasarle como rango "D1:D512" y finalmente usar este código:
| Código: | const int xlCategory = 1;
Variant eje = HojaGrafica.OleFunction("Axes", xlCategory);
eje.OlePropertySet("TickLabelSpacing", 1); |
El código anterior nos permite mostrar los datos de la columna X a "saltos", o sea si ponemos 10, mostraría los datos en saltos de 10 (1, 11, 21...).
En el ejemplo hemos usado el valor "1" para indicarle que muestre todos los valores del eje X, pero como solo hemos puesto los valores de las celdas D1, D256 y D512 solo mostrara esas 3 (bueno, realmente todas, pero como el resto estan en blanco...) |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 29 Jun, 2005 4:04 pm Asunto: |
|
|
Por cierto, puedes mejorar bastante la velocidad al rellenar las filas con la siguiente función:
| Código: | template <typename T> void RellenarFila(T* array, int n, Variant ObjRange)
{
int bounds[4] = {0, n-1, 0, 0};
Variant arrData = VarArrayCreate(bounds, 3, varVariant);
for (int i=0; i<n; i++)
arrData.PutElement(array[i], i, 0);
ObjRange = ObjRange.OlePropertyGet("Resize", n, 1);
ObjRange.OlePropertySet("Value", arrData);
} |
Y para usarla, por ejemplo:
| Código: | int datos[512];
for (int i=0; i<512; i++)
datos[i] = i;
Variant range = Hoja.OlePropertyGet("Range", "B1");
RellenarFila(datos, 512, range); |
|
|
| Volver arriba |
|
 |
Mónica Cmdr

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Jue 30 Jun, 2005 8:52 am Asunto: |
|
|
Muchísimas gracias _Leo, eres la caña. Funciona todo de maravilla.
Digo yo, ¿no te apuntarías a dar un curso de C++Builder "on line"?  |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Jue 30 Jun, 2005 2:24 pm Asunto: |
|
|
_Leo, hasta me da vergüenza preguntarte ésto, pero he estado buscando y no lo encuentro: ¿cómo hago para añadir una nueva hoja después de otra?
Gracias! |
|
| Volver arriba |
|
 |
Invitado
|
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Vie 01 Jul, 2005 12:17 pm Asunto: |
|
|
He debido de explicarme mal, o no encuentro en el enlace anterior lo que busco.
Pero bueno, ya lo he conseguido.
Muchas gracias de todas formas.[/code] |
|
| 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.
|