web-dev-qa-db-ja.com

JasperReportを複数のワークシートを含むExcelファイルにエクスポートするにはどうすればよいですか?

お客様が複数のワークシートを含むExcel形式にエクスポートしたいとの報告があります。基本的に、2つのクエリは同じパラメータを共有しますが、それ以外はすべて異なります。

jasper-reportsで、複数のワークシート(理想的には異なるデータソースから)を含むExcelファイルにどのようにエクスポートしますか?

17
Jacob Schoen

このスレッドのおかげで、複数のシートを使用してExcelエクスポートを作成するのが本当に簡単になりました。私が見つけたのは、次のものを使用できるということでした。

ArrayList<JasperPrint> list = new  ArrayList<JasperPrint>();
list.add(jp1); list.add(jp2);
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT_LIST, list);

エクスポータは、すべてのJasperPrintオブジェクトを自動的に使用して各シートを作成します。また、Jasperレポートの名前(jrxmlファイルで指定)が各シートの名前として使用されます。

現在、このソリューションは私のローカルプロジェクトで機能しているので、お知らせしたいと思います。

20
andrei

ベリサリウスのリンクのおかげで、私たちはそれを理解したようです。これを行う方法の基本は、通常どおりにシートごとに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に設定して、各ページを個別のワークシートに分割する必要があります。

11
Jacob Schoen

現在のバージョン6.1.1に従い、JRXlsExporter.setParameterは非推奨になりました。 JRXlsExporter.setExporterInputに置き換える必要があります。したがって、更新されるコードは次のようになります。

ArrayList<JasperPrint> sheets = new ArrayList<JasperPrint>();
sheets.add(sheet1); 
sheets.add(sheet2);

exporter.setExporterInput(SimpleExporterInput.getInstance(sheets));
2
YAM