2015-07-28 5 views
2

Мне уже удалось экспортировать отчет в формате pdf с помощью jasperreports, но я не могу экспортировать его в формат excel.jasperreports - excel export

Выходной файл xls, который создает моя программа, не открывается с Excel (поврежден) и полностью пуст, если я открываю его с помощью LibreOffice.

Вот код jrxml (тестовый пример):

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="xls" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="d8281a37-1a28-43e6-824c-0d39b69f7d23"> 
<property name="net.sf.jasperreports.export.xls.detect.cell.type" value="true"/> 
<property name="net.sf.jasperreports.print.keep.full.text" value="true"/> 
<property name="net.sf.jasperreports.export.xls.wrap.text" value="false"/> 
<property name="net.sf.jasperreports.export.xls.auto.fit.row" value="true"/> 
<property name="net.sf.jasperreports.export.xls.auto.fit.column" value="true"/> 
<style name="table"> 
    <box> 
     <pen lineWidth="1.0" lineColor="#000000"/> 
    </box> 
</style> 
<style name="table_TH" mode="Opaque" backcolor="#F0F8FF"> 
    <box> 
     <pen lineWidth="0.5" lineColor="#000000"/> 
    </box> 
</style> 
<style name="table_CH" mode="Opaque" backcolor="#BFE1FF"> 
    <box> 
     <pen lineWidth="0.5" lineColor="#000000"/> 
    </box> 
</style> 
<style name="table_TD" mode="Opaque" backcolor="#FFFFFF"> 
    <box> 
     <pen lineWidth="0.5" lineColor="#000000"/> 
    </box> 
</style> 
<subDataset name="Table Dataset 1" uuid="3897caef-b047-4ba2-8b62-bd46ec43553d"/> 
<field name="credit" class="java.lang.Double"/> 
<field name="time" class="java.lang.String"/> 
<title> 
    <band height="50"/> 
</title> 
<pageHeader> 
    <band height="50"> 
     <staticText> 
      <reportElement x="0" y="30" width="100" height="20" uuid="4a091ece-05dc-48a7-8390-bf3722715ca8"/> 
      <text><![CDATA[Nikos]]></text> 
     </staticText> 
    </band> 
</pageHeader> 
<columnHeader> 
    <band height="50"> 
     <staticText> 
      <reportElement x="0" y="30" width="100" height="20" uuid="39c43e60-ee74-4373-bafb-b78647870be5"/> 
      <text><![CDATA[Nikos]]></text> 
     </staticText> 
    </band> 
</columnHeader> 
<detail> 
    <band height="153"> 
     <textField> 
      <reportElement x="0" y="0" width="100" height="20" uuid="ec837765-6e78-417f-b6ea-1cec760fba54"/> 
      <textFieldExpression><![CDATA[$F{credit}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="100" y="0" width="100" height="20" uuid="23e21ff0-e776-4a04-a5d0-a4188694446e"/> 
      <textFieldExpression><![CDATA[$F{time}]]></textFieldExpression> 
     </textField> 
    </band> 
</detail> 
<summary> 
    <band height="229"> 
     <textField> 
      <reportElement x="0" y="0" width="100" height="20" uuid="a5015437-e944-41c1-88bf-9a0d9f88e2d0"/> 
      <textFieldExpression><![CDATA[$F{credit}]]></textFieldExpression> 
     </textField> 
     <textField> 
      <reportElement x="100" y="0" width="100" height="20" uuid="066120ca-8df1-40fb-8dea-b93bf5ef30a9"/> 
      <textFieldExpression><![CDATA[$F{time}]]></textFieldExpression> 
     </textField> 
    </band> 
</summary> 

И это моя Java программа (содержит также PDF успешный экспорт):

public static void main(String[] args) { 
    String inPdfFileName = "src/test/javabeans.jasper"; 
    String inXlsFileName = "src/test/xls.jasper"; 
    String outPdfName = "test.pdf"; 
    String outXlsName = "test.xls"; 
    HashMap pdfParams = new HashMap(); 
    HashMap xlsParams = new HashMap(); 

    Collection<FundBean> fundbeans = FundBeanFactory.getBeanCollection(); 
    pdfParams.put("HighTime", FundBeanFactory.getMax().getTime()); 
    pdfParams.put("LowTime", FundBeanFactory.getMin().getTime()); 

    pdfParams.put("Highest", FundBeanFactory.getMax().getCredit().toString()); 
    pdfParams.put("Lowest", FundBeanFactory.getMin().getCredit().toString()); 

    JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(fundbeans); 
    try { 
     JasperPrint PdfPrint = JasperFillManager.fillReport(
       inPdfFileName, 
       pdfParams, 
       beanCollectionDataSource); 

     JasperPrint xlsPrint = JasperFillManager.fillReport(
       inXlsFileName, 
       xlsParams, 
       beanCollectionDataSource); 

     JRPdfExporter pdfExporter = new JRPdfExporter(); 
     pdfExporter.setExporterInput(new SimpleExporterInput(PdfPrint)); 
     pdfExporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outPdfName)); 
     SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration(); 
     configuration.setCreatingBatchModeBookmarks(true); 
     pdfExporter.setConfiguration(configuration); 
     pdfExporter.exportReport(); 

     JRXlsExporter xlsExporter = new JRXlsExporter(); 

     xlsExporter.setExporterInput(new SimpleExporterInput(xlsPrint)); 
     xlsExporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outXlsName)); 
     SimpleXlsReportConfiguration xlsReportConfiguration = new SimpleXlsReportConfiguration(); 
     xlsReportConfiguration.setOnePagePerSheet(false); 
     xlsReportConfiguration.setRemoveEmptySpaceBetweenRows(true); 
     xlsReportConfiguration.setDetectCellType(false); 
     xlsReportConfiguration.setWhitePageBackground(false); 
     xlsExporter.setConfiguration(xlsReportConfiguration); 

     xlsExporter.exportReport(); 
    } catch (JRException e) { 
     e.printStackTrace(); 
    } 
    } 

Когда я просмотреть в формате xls с iReport Designer, я получаю желаемый результат. Так что я думаю, что проблема заключается в моем Java коде ...

+0

Возможный дубликат [Непрерывное содержание сообщения с Jasper и .xlsx] (http://stackoverflow.com/questions/31649772/unreadable-content-message-with-jasper-and-xlsx) –

+0

Большое спасибо, это помогло я понимаю, где проблема, эти два поля не получают никаких данных из JRBeanCollection. Теперь я могу открыть файл xls, но я не могу понять, почему поля не заполняются. В приведенном выше коде PDF-отчет заполняется от одного и того же javabean, работает отлично. Можете ли вы помочь? – Nikos

+0

Ваша коллекция bean может быть пуста или бобы не следуют соглашениям Java bean: http://stackoverflow.com/questions/1973073/what-is-a-java-bean –

ответ

2

Спасибо за всю помощь, я понял, что вызвало проблему, я использовал один и тот же список боба и для отчета в формате PDF и для XLS, и по какой-то причине, когда я передавал список fillReport(), чтобы создать объект печати для pdf, все бобы, удаленные из списка. Я создал второй JRBeanCollection для объекта xls Print, и все работает отлично!