2012-07-26 6 views
25

BIRTを使用してExcelスプレッドシートを作成しようとしています。スプレッドシートは、2つのオブジェクトをマッピングするクロスタブです。行と列の数は、MySQLデータベースの値に基づいて動的です。現在、私はPDF出力のレポートの実装を行っています。今、Excel用のレポートの2番目のバージョンを作成しようとしています。なぜ私のクロス集計がExcelで切断されるのですか?

私はレポートデザインをコピーし、Excelで動作するように調整しました。すべてがうまく見えますが、最初の3列だけがヘッダーの後に表示されます。すべての行が正しく表示されます。

私は次のことを試してみました:

  • 私はページ上のすべての要素に可視にオーバーフローを設定してみました。これは効果がありませんでした。
  • マスターページの高さと幅をばかげて大きな値に設定しようとしました。すべての情報が正しく表示されていますが、ハードコードされた値を使用しない解決策が望まれます。将来的にデータの幅が私の任意の値を超えてしまう可能性があります。

私は次のように制約しています:

  • 私は(私はBIRTを使用する必要があります)のレポートエンジンを切り替えることができないのです。
  • Excelエミッタを切り替えることができません。

このブログのエントリは私の問題に言及: http://www.spudsoft.co.uk/2011/10/the-spudsoft-birt-excel-emitters/ を、それはエミッタスイッチ以外のソリューションを提供していません。 「ファイルにはページレイアウトに問題があり、回避できませんでした(特にワイドレポートは途切れるでしょう)。

1つのブログエントリを超えて、私のgooglefuが失敗しました。どんな助けもありがとう!ありがとうございました!

+1

BIRTの出力のどこかにサンプルファイルをアップロードし、Excelでどのように表示し、どのように見たいのかを確認して、何かを処理することをお勧めします。個人的/機密データを避け、閲覧/ダウンロードリンクを投稿する – Apostolos55

+0

残念ながら、私はこの質問をしたときに私が働いていた会社にいなくなりました。私がそうだったら私は間違いなくそれをするだろう。私はそうではないので、私はもはや問題を引き起こしていたコードにアクセスすることはできません。 私は、任意に大きな幅の "ソリューション"を使い終わったと思います。私は本当に満足していませんでしたが、それは当時十分に機能していました。 – radicaledward101

+1

この質問は閉じなければなりません。一般に、BIRTは、ボックスのエミュレータを使用していても、すべての列をExcelにエクスポートします。これは、レポートが問題解決に利用できない特定の問題に関する1つの質問です。したがって、この質問に対する可能な答えはありません。 –

答えて

4

ここに2つの質問があります。最初のものは比較的簡単で、2番目のものは複雑です。

1.私のクロスタブはExcelで切り取られていますか?

2.実行時にレポートの列数に基づいてマスターページの幅を動的に調整する方法を教えてください。

A1:列幅が手動で設定されているため、列数がマスターページの設定幅を超えて拡大されるため、クロスタブが切断されています。レポートデザイン要素を取得して調整するたびに、BIRTは自分が何をしているかを知っているとみなし、自分の設定を上書きしません。

解決策は、レポート要素([表]または[クロスタブ])を再作成し、手動でサイズを調整しないことです。 HTMLまたはExcelで実行すると、すべての列が使用可能なマスターページ幅で表示されるように自動的に設定されます。 BIRT 4.2クロスタブ、2インチのマスターページの幅と30列

Two Inch by 30 Columns

A2を使用したレポートアイテムの

スクリーンショット:これは容易ではない、と私が答えを提供することはありません今回。解決策を指摘し、いくつかの道路ブロックを特定します。この質問に対する有効な解決策には、サンプルデータベースを使用した機能ソリューションを含める必要があります。

(BIRT 4.2.1のよう

Challenge1 - マスターページ幅は、表またはクロスタブ項目が完了して報告する前にイベントにBIRT Report Scriptingを設定されています。レポート内の列の数を単純に数えることはできません。

あなたは、列をカウントしたい場合 - レポートデザインは、私の研究では

columnCount = 0; 

クロスタブ、のonCreate

columnCount ++; 

をintialize

2つのパスがあります前に列をカウントするための提案クロスタブ項目を作成します。どちらの

  1. ランbeforeFactoryに設定されているデータ数を取得し、それを使用し、その後、(これはカウントし、レポートのための1つのためにデータ・ベース、一から二のクエリを意味します)。

  2. インラインクエリの値を計算し、データセットonFetchで収穫します。

計算列を使用してデータセット、onFetchオプションに従いましたが、機能しませんでした。

Challenge2 - マスタページの幅プロパティは、レポートデザインbeforeRenderまたはその前に設定する必要があります。 beforeFactoryが最も頻繁に推奨されています。さらに、マスタページの幅プロパティは、マスターページの「タイプ」が「カスタム」に設定されている場合にのみ使用できます。これは、プロパティエディタで手動で設定します。一般

渡すonFetchからbeforeFactoryへの値は、整数ではなく文字列を渡すことができるPersistentGlobalVariableを使用して行う必要があります。私はこれがうまくいかないためのあらゆる種類の方法を見つけました。でもPersistentGlobalVariableに「12インチ」を渡すことによって、(タイプ=カスタムの場合)

はバリュー

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

を渡しbeforeFactoryにおけるこれらのコードのどちらかが、マスターページの幅を調整しますマスターページ幅

を調整することができませんでした値を計算し、私は見つけるか、マスターページWを調整機能レポートを作成することができなかった最終的にはそれを

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

を渡しますレポート実行時に生成された数値列に渡される幅。私は可能だと思いますが、そうすることは私の現在のスキルを超えています。

関連する問題