vinculadas - ¿Por qué se corta mi tabla cruzada en Excel?
uso de las tablas dinamicas (1)
Estoy intentando crear una hoja de cálculo Excel usando BIRT. La hoja de cálculo es una tabla cruzada que mapea dos objetos juntos. El número de filas y columnas es dinámico en función de los valores en una base de datos MySQL. Actualmente tengo una implementación de trabajo del informe para salida de PDF. Ahora, intento crear una segunda versión del informe para Excel.
Copié el diseño del informe y comencé a ajustarlo para que funcione con Excel. Todo se ve bien, pero solo las primeras 3 columnas se muestran después del encabezado. Todas las filas aparecen correctamente
He probado lo siguiente:
- Intenté configurar el Desbordamiento en Visible en cada elemento de la página. Esto no tuvo efecto.
- Intenté configurar el alto y el ancho de la página maestra en valores ridículamente grandes. Toda la información se muestra correctamente, pero estoy esperando una solución sin valores codificados. En el futuro, el ancho de los datos podría superar mi valor arbitrario nuevamente y cortarse.
Estoy limitado de las siguientes maneras:
- No puedo cambiar los motores de informes (tengo que usar BIRT).
- No puedo cambiar los emisores de Excel.
Esta entrada del blog menciona mi problema: http://www.spudsoft.co.uk/2011/10/the-spudsoft-birt-excel-emitters/ pero no ofrece una solución que no sea un conmutador de emisor. La cita específica es "Los archivos también tienen problemas con el diseño de página que no pude solucionar (específicamente, se cortarán los informes anchos)".
Más allá de la entrada de un blog, mi googlefu me ha fallado. ¡Cualquier ayuda es apreciada! ¡Gracias!
Hay dos preguntas aquí. El primero es relativamente fácil, el segundo es complejo.
1.¿Por qué se corta mi pestaña cruzada en Excel?
2. ¿Cómo ajusto dinámicamente el ancho de la página maestra en función del número de columnas en el informe en tiempo de ejecución?
A1: La pestaña Cruzar se está cortando porque los anchos de columna se han establecido manualmente, donde el número de columnas se expandirá más allá del ancho establecido de la página Maestra. Cada vez que toma el elemento de diseño del informe y lo ajusta, BIRT asume que sabe lo que hace y no anula su configuración.
La solución es recrear el elemento de informe (tabla o tabla cruzada) y no ajustar manualmente ningún tamaño. Cuando se ejecuta en HTML o Excel, todas las columnas se configurarán automáticamente para mostrarse en el ancho de la página maestra disponible.
Captura de pantalla de una BIRT 4.2 Cross Tab, elemento de informe con un ancho de página maestra de 2 pulgadas y 30 columnas
A2: Esto no es fácil, y no proporcionaré la respuesta en este momento. Apuntaré hacia la solución e identificaré algunos de los bloques de ruta. Una solución válida a esta pregunta debe incluir una solución funcional que utilice la base de datos de muestra.
(a partir de BIRT 4.2.1 )
Desafío1: el ancho de la página maestra se establece en las secuencias de comandos del informe BIRT en los eventos antes de que se complete la tabla del informe o el elemento de la tabla cruzada. No puede simplemente contar cuántas columnas hay en el informe;
Si quisieras contar, columnas -
Diseño de informes intialize
columnCount = 0;
Cross Tab, onCreate
columnCount ++;
En mi investigación, hay dos caminos sugeridos para contar columnas antes de que se cree el elemento Cross Tab. Ya sea
Ejecute el conjunto de datos en beforeFactory ( esto significa dos consultas a la base de datos, una para contar y otra para el informe ), luego obtenga un conteo y úsela.
Calcule el valor en su consulta inicial y cópielo en el conjunto de datos, enFecha.
Seguí la opción Conjunto de datos, entablar, usando una columna calculada, pero no lo hice funcionar.
Desafío2: la propiedad de ancho de la página maestra debe configurarse en o antes del diseño del informe, antes de Render. Con beforeFactory siendo el más recomendado. Además, la Propiedad de ancho de la Página maestra solo está disponible cuando el "Tipo" de la página maestra está configurado como "Personalizado", en mis intentos configuré esto manualmente en el Editor general de propiedades.
Los valores de Pasar desde el inicio de sesión a beforeFactory se deben hacer usando un PersistentGlobalVariable que solo puede pasar cadenas, no enteros. Encontré todo tipo de formas para que esto no funcione. Incluso al pasar "12 in" en PersistentGlobalVariable no se pudo ajustar la página maestra. Ancho
Cualquiera de estos códigos en beforeFactory ajustará el ancho de la página maestra (cuando Type = Custom)
Pase el valor
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width","12in");
Calcule un valor y páselo
increaseWidth = 20;
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage( "Simple MasterPage").setProperty("width",((2+increaseWidth)+"in"));
Al final, no he podido encontrar ni crear un informe funcional que ajuste el ancho de la página maestra pasado en las columnas numéricas generadas en el tiempo de ejecución del informe. Creo que es posible, pero hacerlo está más allá de mis habilidades actuales.