Pourquoi mon Crosstab est coupé dans Excel?

j'essaie de créer une feuille de calcul excel en utilisant BIRT. La feuille de calcul est une table de correspondance entre deux objets. Le nombre de lignes et de colonnes est dynamique basé sur des valeurs dans une base de données MySQL. Actuellement, j'ai une mise en œuvre de travail du rapport pour la production de PDF. Maintenant, j'essaie de créer une deuxième version du rapport pour Excel.

j'ai copié le design du rapport et j'ai commencé à l'ajuster pour travailler avec Excel. Tout semble bien, mais seulement les 3 premières colonnes sont affiche après l'en-tête. Toutes les lignes apparaissent correctement.

j'ai essayé le code suivant:

  • j'ai essayé de définir Overflow À Visible sur chaque élément de la page. Cela n'a eu aucun effet.
  • j'ai essayé de définir la hauteur et la largeur de la page principale à des valeurs ridiculement grandes. Toutes les informations affichées correctement, mais j'espère une solution sans valeurs codées dures. Dans le futur la largeur de données pourrait dépasser à nouveau ma valeur arbitraire et être coupé hors.

je suis contraint de la façon suivante:

  • Je ne suis pas en mesure de changer de moteur de rapport (je dois utiliser BIRT).
  • Je ne suis pas capable de changer D'émetteur Excel.

Cette entrée de blog mentionne mon problème: http://www.spudsoft.co.uk/2011/10/the-spudsoft-birt-excel-emitters/ mais il n'offre pas une solution autre que l'émetteur de l'interrupteur. La citation spécifique est "les fichiers ont également des problèmes avec la mise en page que je ne pouvais pas travailler autour (en particulier les rapports larges seraient coupés)."

au-delà de la seule entrée de mon blog, mon googlefu m'a échoué. Toute aide est appréciée! Je vous remercie!

25
demandé sur radicaledward101 2012-07-26 19:21:23

1 réponses

Il y a deux questions ici. Le premier est relativement facile, la seconde est complexe.

1.Pourquoi mon onglet croisé est coupé dans Excel?

2.Comment puis-je ajuster dynamiquement la largeur de la page principale en fonction du nombre de colonnes dans le rapport à l'exécution?

A1: l'onglet croisé est coupé parce que les largeurs de colonne ont été réglées manuellement, où le nombre de colonnes va augmenter au-delà de la largeur définie de la page principale. Chaque fois que vous prenez la conception de rapport element et adjust, BIRT suppose que vous savez ce que vous faites et n'outrepasse pas votre paramètre.

la solution est de recréer l'élément de rapport (table ou onglet croisé) et de ne pas ajuster manuellement toutes les tailles. Lorsqu'elles sont exécutées en HTML ou Excel, toutes les colonnes sont automatiquement réglées pour s'afficher dans la largeur de la page principale disponible.

capture D'écran d'un BIRT 4.2 onglet croisé, Report Item with a 2 inch master page width and 30 colonnes

Two Inch by 30 Columns

A2: Ce n'est pas facile, et je ne vais pas fournir la réponse en ce moment. Je vais pointer vers la solution et identifier quelques obstacles. Une solution valable à cette question doit inclure une solution fonctionnelle utilisant la base de données de L'échantillon.

( à partir de BIRT 4.2.1)

Challenge1-la largeur de la page principale est définie BIRT Report Scripting dans les événements antérieurs au tableau de rapport ou La croix de l'Onglet de l'élément en cours d'achèvement. Vous ne pouvez pas simplement compter le nombre de colonnes dans le rapport;

Si vous vouliez compter, colonnes:

Rapport de Conception initialiser

 columnCount = 0;

Croix de l'Onglet, onCreate

 columnCount ++;

dans ma recherche, il y a deux chemins suggérés pour compter les colonnes avant la création de l'onglet croisé.

  1. exécutez le jeu de données dans le beforeFactory ( cela signifie deux requêtes aux données base, un pour compter et un pour le rapport), puis obtenir un compte et l'utiliser.

  2. Calculez la valeur dans votre requête initiale et récoltez-la dans le jeu de données, onFetch.

j'ai suivi l'ensemble de données, onFetch, option en utilisant une colonne calculée mais je ne l'ai pas fait fonctionner.

Challenge2 - la propriété Width de la page principale doit être réglée sur ou avant la conception du rapport, beforeRender. Avec le beforeFactory étant le plus souvent recommandé. De plus, la propriété Width de la page principale n'est disponible que lorsque la Page principale "Type" est définie à "Custom", dans mes tentatives je l'ai définie manuellement dans L'éditeur de propriétés Général.

pour passer des valeurs de onFetch à beforeFactory, il faut utiliser un PersistentGlobalVariable qui ne peut passer que des Chaînes, pas des entiers. J'ai trouvé toutes sortes de façon de faire fonctionne pas. Même en passant "12in" dans Persistglobalvariable n'a pas réussi à ajuster le maître la Largeur de la page

L'un ou l'autre de ces codes dans beforeFactory ajustera la largeur de la Page principale (quand Type = Custom)

passer la valeur

reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width","12in");

calculez une valeur et passez-la

increaseWidth = 20;
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage( "Simple MasterPage").setProperty("width",((2+increaseWidth)+"in"));

à la fin, j'ai été incapable de trouver ou de créer un rapport fonctionnel qui ajuste la largeur de la page maître transmise sur les colonnes de nombre générées au moment de l'exécution du rapport. Je pense que c'est possible, mais cela dépasse mes compétences actuelles.

4
répondu James Jenkins 2013-04-19 15:09:50