お客様が複数のワークシートを含むExcel形式にエクスポートしたいとの報告があります。基本的に、2つのクエリは同じパラメータを共有しますが、それ以外はすべて異なります。
jasper-reportsで、複数のワークシート(理想的には異なるデータソースから)を含むExcelファイルにどのようにエクスポートしますか?
このスレッドのおかげで、複数のシートを使用してExcelエクスポートを作成するのが本当に簡単になりました。私が見つけたのは、次のものを使用できるということでした。
ArrayList<JasperPrint> list = new ArrayList<JasperPrint>();
list.add(jp1); list.add(jp2);
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT_LIST, list);
エクスポータは、すべてのJasperPrintオブジェクトを自動的に使用して各シートを作成します。また、Jasperレポートの名前(jrxmlファイルで指定)が各シートの名前として使用されます。
現在、このソリューションは私のローカルプロジェクトで機能しているので、お知らせしたいと思います。
ベリサリウスのリンクのおかげで、私たちはそれを理解したようです。これを行う方法の基本は、通常どおりにシートごとにJasperPrintオブジェクトを作成することです。だからあなたは持っています:
JasperPrint firstWorkSheet = ...;
JasperPrint secondWorkSheet = ...;
JasperPrintオブジェクトは、この時点ですでにデータソースで埋められています。次に、次のことを行います。
List<JRPrintPage> pages = new ArrayList<JRPrintPage>(secondWorkSheet.getPages());
int i = firstWorkSheet.getPages().size();
for (int count = 0; count < pages.size(); count++) {
firstWorkSheet.addPage(i, (JRPrintPage) pages.get(count));
i++;
}
これにより、i
が現在firstWorkSheet
にあるページ数(1つである必要があります)に設定されます。次に、secondWorkSheet
のページをループし、firstWorkSheetに追加します。
JasperReportで、ワークシートのjrxmlファイルごとに1ページとして印刷するように設定されていることを確認してください。これで準備完了です。何か変更があれば更新しますが、うまくいくはずです。
更新:
net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter
を使用する必要があることがわかりました
の代わりに
net.sf.jasperreports.engine.export.JRXlsExporter
複数のワークシートにエクスポートするときに問題があるようです。
また、isIgnorePagination
のjrxmlファイルの設定は次のようにする必要があります。
isIgnorePagination="true"
各jrxmlファイルが単一のページとしてエクスポートされるようにします。
次に、JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET
パラメータをtrueに設定して、各ページを個別のワークシートに分割する必要があります。
現在のバージョン6.1.1に従い、JRXlsExporter.setParameter
は非推奨になりました。 JRXlsExporter.setExporterInput
に置き換える必要があります。したがって、更新されるコードは次のようになります。
ArrayList<JasperPrint> sheets = new ArrayList<JasperPrint>();
sheets.add(sheet1);
sheets.add(sheet2);
exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));