2016-01-15 18 views
3

Я работаю над отчетом с iReport, который имеет много подписок.Как экспортировать на несколько листов в excel из отчета jasper

Я хочу иметь два других листа в файле excel при создании отчета из моего приложения.

При поиске в Интернете я нашел ответы на вопрос о создании перерыва в отчете, имея опцию «Игнорировать разбивку на страницы» в подзаголовках «true», но для меня все еще неясно.

Какие возможности контролировать, как и когда новый лист создан

+0

Hello Petter! Спасибо за ваши ответы :) На самом деле я использую сервер Jasper Report.Что я сделал, так это то, что я установил net.sf.jasperreports.export.xls.one.page.per.sheet = "true", создал новую группу, в которой я помещаю подрепорт, который будет создан во втором листе с свойством Group : Начните с новой страницы «checked». Также свойство «игнорировать разбивку на страницы» было проверено в подзаголовке и в главном отчете, и это сработало! Я поместил содержание основного отчета в группу подробностей. – Cataleya

+0

Done :) Большое спасибо! – Cataleya

ответ

1

В докладе яшмы существуют различные способы достижения нового листа как в jrxml и в java коде. Поведение по умолчанию - создать новый лист для каждой страницы. Я проиллюстрирую 3 наиболее распространенных способа с относительной проблемой их использования.

Игнорировать пагинацию и сломать элемент

Метод

установить isIgnorePagination="true" на jasperReport тег и добавить

<break> 
    <reportElement x="0" y="0" width="100" height="1" uuid="c5371aa4-2eb4-4ab9-8cae-39f50da3317b"/> 
</break> 

, когда вам нужен новый лист.

Проблема: Отчет не будет красиво, если вы экспортируете также PDF (с его игнорированием пагинации)

Используйте свойство jrxml

Метод Чтобы избежать создание нового листа на каждой новой странице, установка свойства

net.sf.jasperreports.export.xls.one.page.per.sheet="false" 

И когда вы хотите, чтобы создать новый лист до или после reportElement добавить относительное свойство:

net.sf.jasperreports.export.xls.break.before.row="true" 
net.sf.jasperreports.export.xls.break.after.row="true" 

Проблема: Столбцы на каждом листе будет то же самое, и это может привести к неправильному Colspan на различных

использования Java листа и проверочный лист, как вы любите (загрузку различных отчетов)

Метод

List<JasperPrint> sheets = new ArrayList<JasperPrint>(); 
for (int i=1;i<=8;i++){ 
    JasperPrint print = JasperFillManager.fillReport("subReport_" + i + ".jasper", paramMap, connection); 
    sheets.add(print); 
} 
JRXlsxExporter exporter = new JRXlsxExporter(); 
exporter.setExporterInput(SimpleExporterInput.getInstance(sheets)); 
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(new File("text.xlxs")); 
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration(); 
configuration.setSheetNames(sheetNames): //sheets names is an array of the different names. 
configuration.setOnePagePerSheet(false); //remove that it break on new page 
configuration.setDetectCellType(true); 
exporter.setConfiguration(configuration); 
exporter.exportReport(); 

Проблема: Вы не можете использовать этот метод, если вы используете сервер отчетов яшмы.

+0

Это вызывает много разочарования для меня на данный момент. В настоящее время я установил свой основной отчет: net.sf.jasperreports.page.break.no.pagination = 'apply' и net.sf.jasperreports.export.xls.one.page.per.sheet = 'true'. В главном отчете и во всех подзаголовках установлено значение Игнорировать разбиение на страницы TRUE. Подсчеты находятся в своем собственном заголовке группы с ручным разрывом страницы в начале каждого группового диапазона. Это работает ТОЧНО, как это должно быть, когда я запускаю отчет в Jasper Studio и экспортирую excel. Тем не менее, когда я запускаю это в пользовательском интерфейсе Jasper, все отображается на одной странице в HTML и в XLS-экспорте –

+0

@drewkroft Мне понадобится [mcve], чтобы проверить, что ваша проблема –