2010-01-05 16 views
6

Excel dosyası oluşturan JasperReport Raporunda çalışıyorum. Nedense benim hücre formatlarım/türleri nasıl olması gerektiği değil. Örneğin hücremde Date nesnesi var ancak Excel dosyası oluşturduğumda hücre tipini Number (Sayı) olarak ayarlar, ya da Long type (Hücre) metinde hücredir, ancak hücrenin formatı sayıdır ve ayrıca kullanıcı tarih biçimini düzenlediğinde (örneğin, 11/02)/2012 11/03/2012 olarak değiştirildi) bu sayıyı (41581.00) numaraya dönüştürüyor.JasperReport'ta Excel Hücre Biçimi Raporu

public void generateXLSPopup(String tmpltFileLocation, Map<String, Object> params, Collection vo) { 
    log.fine("ReportEngine: Start Generate XLS Popup Report Function!"); 

    Filename f = new Filename(tmpltFileLocation); 

    String xlsFileName = f.getFileName() + "_" + sDateFormated + ".xlsx"; 

    try { 
     JasperPrint jasperPrint = getJRPrint(tmpltFileLocation, params, new JRBeanCollectionDataSource(vo)); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     JRXlsxExporter exporter = getCommonXlsxExporter(); 

     exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint); 
     exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, baos); // fill byte array output stream 

     exporter.exportReport(); 

     FacesContext context = FacesContext.getCurrentInstance(); 
     HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse(); 

     response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
     response.setHeader("Content-disposition", "attachment; filename=" + xlsFileName); 
     response.setContentLength(baos.size()); 
     response.getOutputStream().write(baos.toByteArray()); 
     context.responseComplete(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    log.fine("ReportEngine: Finish Generate XLS Popup Report Function!"); 
} 


private JRXlsxExporter getCommonXlsxExporter(){ 
    JRXlsxExporter exporter = new JRXlsxExporter(); 
    exporter.setParameter(JRXlsExporterParameter.IGNORE_PAGE_MARGINS, Boolean.TRUE); 
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); 
    exporter.setParameter(JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, Boolean.TRUE); 
    exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); 
    exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); 
    exporter.setParameter(JExcelApiExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE); 
    //exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE); 


    return exporter; 
} 

Ve işte benim Jasper raporu xml dosyasındaki ilk birkaç satır örnektir:: İşte

benim kodudur (sadece rapor ile tarayıcı penceresine açılır akım üretir)

<textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
       <reportElement style="alternateStyle" stretchType="RelativeToBandHeight" x="0" y="0" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> 
      </textField> 
      <textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
       <reportElement style="alternateStyle" stretchType="RelativeToBandHeight" x="200" y="0" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression class="java.lang.String"><![CDATA[$F{emsProdNo}]]></textFieldExpression> 
      </textField> 
      <textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
       <reportElement style="alternateStyle" stretchType="RelativeToBandHeight" x="100" y="0" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression class="java.lang.String"><![CDATA[$F{courseName}]]></textFieldExpression> 
      </textField> 
      <textField isStretchWithOverflow="true" pattern="MMMMM dd, yyyy" isBlankWhenNull="true"> 
       <reportElement style="alternateStyle" stretchType="RelativeToBandHeight" x="300" y="0" width="98" height="20"/> 
       <textElement> 
        <font isUnderline="true"/> 
       </textElement> 
       <textFieldExpression class="java.util.Date"><![CDATA[$F{startDate}]]></textFieldExpression> 
      </textField> 
      <textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
       <reportElement style="alternateStyle" stretchType="RelativeToBandHeight" x="474" y="0" width="81" height="20"/> 
       <textElement/> 
       <textFieldExpression class="java.lang.String"><![CDATA[$F{endDateStr}]]></textFieldExpression> 
      </textField> 

(ben anında JasperReport şablon dosyasını üreten ediyorum yüzden ben ihtiyaç nasıl, bana sormayın lütfen.)

cevap

3

sorunu/o POI 3.5 kullanıyorum ve kulüpler oldu çünkü JasperReport s 3.7.0 ve Oluşturma XLSX Excel formatı. POI 3.5, JasperReports 3.7.1'de desteklenecektir (veya sadece SVN'den anlık görüntü alınacaktır). Ne yaptım ben sadece eski Excel tipi (xls) dosyasına geri döndüm ve mükemmel çalıştı.

2

Bilginize

setParameter(JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, Boolean.TRUE); 

veya IS_DETECT_CELL_TYPE, Boolean.TRUE numaraya değiştirmek için tarihi verendir. JasperReports parametre net.sf.jasperreports.export.xls.pattern yeni sürümünde

+1

Ne diyorsunuz? Bu bayrak excel hücresinde olduğunda tarih türü olarak tarih türünü doğru olarak tanımaz. Bu, FALSE sayı alanlarına ayarlandığında yanlış olur. Peki, her iki türün nasıl iyi çalıştığını söyleyebilirim xlsx? – tropikalista

7

tanıtıldı.

örnek: Bu parametre hakkında

<textField pattern="EEE, MMM d, yyyy"> 
    <reportElement x="100" y="12" width="75" height="11"> 
     <property name="net.sf.jasperreports.export.xls.pattern" value="ddd, mmm d, yyyy"/> 
    </reportElement> 
    <textElement textAlignment="Right"/> 
    <textFieldExpression class="java.sql.Timestamp"><![CDATA[$F{dateField}]]> 
    </textFieldExpression> 
</textField> 

Bilgi here olduğunu. Kullanım örneği here'dur.

2

JasperReports sürüm 4.1.1 net.sf.jasperreports.export.xls.pattern tanıtıldı. özelliklerinde

check here

ifadelerde

özellikleri >> net.sf.jasperreports.export.xls.pattern

özellikleri metin için >> @ değer isim, yyyy Tarih formatı için -mm-dd, para birimi için #, ## 0.00; - #, ## 0,00 ...

İlgili konular