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 

Ayuda: Gráficas en excel (2ª parte)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ayuda: Gráficas en excel (2ª parte) Responder citando

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... Shocked no miro a nadie)

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

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

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

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

_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?

Embarassed

Gracias!
Volver arriba
Mensaje    Asunto: Responder citando

https://cppbuilder.es/viewtopic.php?t=9762
Volver arriba
Mensaje    Asunto: Responder citando

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
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.