ここに2つの質問があります。最初のものは比較的簡単で、2番目は複雑です。
1.Excelでクロスタブが途切れるのはなぜですか?
2.実行時にレポートの列数に基づいてマスターページの幅を動的に調整するにはどうすればよいですか?
A1:列幅が手動で設定されているため、[クロス]タブが切り取られています。列の数は、マスターページの設定された幅を超えて拡張されます。レポートデザイン要素を取得して調整するときはいつでも、BIRTは、ユーザーが何をしているかを知っていると想定し、設定を上書きしません。
解決策は、レポート要素(テーブルまたはクロスタブ)を再作成し、サイズを手動で調整しないことです。HTMLまたはExcelで実行すると、すべての列が使用可能なマスターページ幅で表示されるように自動的に設定されます。
BIRT 4.2クロスタブのスクリーンショット、2インチのマスターページ幅と30列のレポートアイテム

A2:これは簡単なことではありません。現時点では回答を提供しません。解決策を示し、いくつかの障害を特定します。この質問に対する有効な解決策には、サンプルデータベースを使用した機能する解決策が含まれている必要があります。
(BIRT 4.2.1以降)
課題1-マスターページの幅は、レポートテーブルまたはクロスタブアイテムが完了する前のイベントでBIRTレポートスクリプトに設定されます。レポートに含まれる列の数を単純に数えることはできません。
カウントしたい場合は、列-
レポートデザインの初期化
columnCount = 0;
クロスタブ、onCreate
columnCount ++;
私の研究では、クロスタブアイテムが作成される前に列を数えるために提案された2つのパスがあります。また
beforeFactoryでデータセットを実行し(これは、データベースへの2つのクエリ、1つはカウント用、もう1つはレポート用)を実行し、カウントを取得して使用します。
最初のクエリで値を計算し、データセット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"));
結局、レポートの実行時に生成された数値列に渡されるマスターページ幅を調整する機能レポートを見つけたり作成したりすることができませんでした。それは可能だと思いますが、それは私の現在のスキルを超えています。