Вопрос по excel, jasper-reports – Одна страница на свойство листа в JasperReports

3

У меня есть требование, когда я должен создать отчет в JasperReports. Отчет имеет 4 листа. На первом листе 5 страниц, а на других листах - одна или две страницы. Проблема, с которой я сталкиваюсь, заключается в использовании символа Net.sf.jasperreports.export.xls.one.page.per.sheet свойство и установите его вправд, тогда все страницы идут в разных листах. Мне нужно спроектировать отчет таким образом, чтобы некоторые страницы приходили на один лист, а другие - на другой лис

Можно ли это сделать

Так у вас есть 4 отдельных файла отчета, которые вы используете? Jacob Schoen

Ваш Ответ

1   ответ
8

которые вы экспортируете в пакетном режиме, то в каждом отчете вам нужно установитьIgnore Pagination вtrue (это атрибут в теге jasperReport в начале файла jrxml, атрибут выглядит какisIgnorePagination="true").

На самом деле экспорт должен выглядеть примерно так:

List<JasperPrint> jasperPrintList = new ArrayList<JasperPrint>();
jasperPrintList.add(JasperFillManager.fillReport("report1.jasper", params1));
jasperPrintList.add(JasperFillManager.fillReport("report2.jasper", params2));
jasperPrintList.add(JasperFillManager.fillReport("report3.jasper", params3));
jasperPrintList.add(JasperFillManager.fillReport("report4.jasper", params4));

JRXlsExporter exporter = new JRXlsExporter();

exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "BatchExportReport.xls");
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);

exporter.exportReport();

Чтобы задать имена листов, взгляните на Динамические имена листов Пример, который у них есть в JasperForge.

Согласно вашему комментарию вы хотите использовать одни и те же шаблоны отчетов для экспорта в несколько форматов. С Excel, единственным, который должен игнорировать нумерацию страниц. То, что вы можете сделать, это установить с помощью параметра во время выполнения вместо жесткого кодирования в отчете. Поэтому добавьте следующее к params1, params2, params3 и params4:

if(exportFormat == EXCEL) {
   params1.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE);
   params2.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE);
   params3.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE);
   params4.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE);
}
+ 1 Моей первой мыслью было сделать то же самое:) Alex K
Спасибо за ответ. Однако я не уверен, ясно ли я изложил свою проблему. Позвольте мне дать вам четкое требование. Шаблон, который мне дали, находится в формате xls и имеет 4 различных вкладки / листа. Проблема была бы решена, если бы это было только в случае использования 3 вложенных отчетов и установки одной страницы для каждого свойства листа. Однако проектирование было завершено, когда я Я понял, что сама первая вкладка / лист имеет 5 страниц. Так что установка свойства «одна страница на лист» приведет к тому, что эти страницы появятся на разных вкладках / листах, что мне не нужно. Есть ли способ выполнить это требование? Abhinash
Я должен что-то упустить, потому что страница ничего не значит в контексте таблицы Excel. Я думаю, вам придется переделать этот первый отчет, который состоит из 5 страниц, чтобы он был одной страницей. Может быть, вы могли бы использовать некоторую хитрость подотчета, чтобы осуществить это. Вы можете разместить отчет как подотчет в разделе подробностей нового отчета верхнего уровня. Установите для параметра игнорирования нумерацию страниц значение «Истина» на обоих, а затем экспортируйте ег Jacob Schoen
Ответ за ответ. Да, с вашим предложением он отлично работает в экспорте в Excel. Однако для другого экспорта, такого как pdf и rtf, он генерирует длинную единственную страницу, когда я устанавливаю пагинацию игнорирования в true. Мне нужно спроектировать отчет так, чтобы он был в формате для печати в Excel (здесь я предполагаю, что у нас есть опции для установки формата печати) и, что наиболее важно, в pdf и rtf. Есть ли свойство, которое я могу установить или добавить? Abhinash
Я обновил свой ответ, это должно работать на все. Jacob Schoen

Похожие вопросы