25

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

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

私は以下を試しました:

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

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

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

このブログエントリは私の問題に言及しています: http ://www.spudsoft.co.uk/2011/10/the-spudsoft-birt-excel-emitters/ しかし、それはエミッタスイッチ以外の解決策を提供していません。具体的な引用は、「ファイルには、回避できないページレイアウトの問題もあります(具体的には、幅の広いレポートが途切れる)」です。

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

4

1 に答える 1

4

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

1.Excelでクロスタブが途切れるのはなぜですか?

2.実行時にレポートの列数に基づいてマスターページの幅を動的に調整するにはどうすればよいですか?

A1:列幅が手動で設定されているため、[クロス]タブが切り取られています。列の数は、マスターページの設定された幅を超えて拡張されます。レポートデザイン要素を取得して調整するときはいつでも、BIRTは、ユーザーが何をしているかを知っていると想定し、設定を上書きしません。

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

BIRT 4.2クロスタブのスクリーンショット、2インチのマスターページ幅と30列のレポートアイテム

2インチ×30列

A2:これは簡単なことではありません。現時点では回答を提供しません。解決策を示し、いくつかの障害を特定します。この質問に対する有効な解決策には、サンプルデータベースを使用した機能する解決策が含まれている必要があります。

BIRT 4.2.1以降

課題1-マスターページの幅は、レポートテーブルまたはクロスタブアイテムが完了する前のイベントでBIRTレポートスクリプトに設定されます。レポートに含まれる列の数を単純に数えることはできません。

カウントしたい場合は、列-

レポートデザインの初期化

 columnCount = 0;

クロスタブ、onCreate

 columnCount ++;

私の研究では、クロスタブアイテムが作成される前に列を数えるために提案された2つのパスがあります。また

  1. beforeFactoryでデータセットを実行し(これは、データベースへの2つのクエリ、1つはカウント用、もう1つはレポート用)を実行し、カウントを取得して使用します。

  2. 最初のクエリで値を計算し、データセットonFetchで収集します。

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

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

onFetchからbeforeFactoryへの値の受け渡しは、整数ではなく文字列のみを渡すことができるPersistentGlobalVariableを使用して行う必要があります。私はこれが機能しないためのあらゆる種類の方法を見つけました。PersistentGlobalVariableで「12in」を渡しても、マスターページの幅を調整できませんでした

beforeFactoryのこれらのコードのいずれかがマスターページの幅を調整します(タイプ=カスタムの場合)

値を渡す

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

値を計算して渡します

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

結局、レポートの実行時に生成された数値列に渡されるマスターページ幅を調整する機能レポートを見つけたり作成したりすることができませんでした。それは可能だと思いますが、それは私の現在のスキルを超えています。

于 2013-04-19T15:09:50.290 に答える