2010-01-05 20 views
6

मैं जैस्पर रिपोर्ट रिपोर्ट पर काम कर रहा हूं जो एक्सेल फ़ाइल उत्पन्न करता है। किसी कारण से मेरे सेल प्रारूप/प्रकार इस प्रकार नहीं हैं कि वे कैसे होना चाहिए। उदाहरण के लिए मेरे पास मेरे सेल में डेट ऑब्जेक्ट है लेकिन जब मैं एक्सेल फ़ाइल जेनरेट करता हूं तो यह सेल टाइप को नंबर पर सेट करता है, या लांग टाइप सेल में टेक्स्ट होता है लेकिन सेल का प्रारूप नंबर होता है और जब उपयोगकर्ता डेट सेल संपादित करता है (उदाहरण के लिए दिनांक 11/02/2012 बदलकर 11/03/2012) यह तिथि से संख्या (41581.00) परिवर्तित करता है।जैस्पर रिपोर्ट रिपोर्ट में एक्सेल सेल प्रारूप

यहाँ मेरी कोड है (यह सिर्फ रिपोर्ट के साथ ब्राउज़र विंडो को पॉपअप धारा आउटपुट):

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; 
} 

और यहाँ मेरी Jasper रिपोर्ट xml फ़ाइल में प्रथम कुछ पंक्तियों का उदाहरण है:

<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> 

(कारण है कि मैं उड़ पर jasperreport टेम्पलेट फ़ाइल पैदा कर रहा हूँ कृपया मुझे मत पूछो, कि मैं इसे कैसे की जरूरत है।)

उत्तर

3

समस्या है/किया गया था कि क्योंकि मैं POI 3.5 उपयोग कर रहा हूँ और JasperReport एस 3.7.0 और एक्सएलएसएक्स एक्सेल प्रारूप उत्पन्न करना। पीओआई 3.5 को जैस्पररपोर्ट्स 3.7.1 में समर्थित किया जाएगा (या बस एसवीएन से स्नैपशॉट प्राप्त करें)। तो मैंने जो किया वह बस पुराने एक्सेल प्रकार (एक्सएलएस) फ़ाइल पर वापस चला गया और यह सही काम किया।

2

बस FYI

setParameter(JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, Boolean.TRUE); 

या IS_DETECT_CELL_TYPE, Boolean.TRUE एक जो दिनांक नंबर करने के लिए बदलने के लिए बनाता है।

+1

तो आप जो कह रहे हैं वह है कि जब यह ध्वज एक्सेल में सेल पर होता है तो तारीख के प्रकार के रूप में सही ढंग से पहचान नहीं होगा। जब यह FALSE संख्या फ़ील्ड पर सेट होता है तो गलत हो जाता है। तो, मैं दोनों प्रकार के काम कैसे ठीक कर सकता हूं मैं xlsx? – tropikalista

7

JasperReports पैरामीटर net.sf.jasperreports.export.xls.pattern के नए संस्करण में पेश किया गया था।

नमूना:

<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> 

इस पैरामीटर के बारे में जानकारी here है। उपयोग का नमूना here है।

2

JasperReports संस्करण 4.1.1 net.sf.jasperreports.export.xls.pattern पेश किया गया था।

check here

गुण में भाव

गुण >> net.sf.jasperreports.export.xls.pattern

गुण पाठ के लिए मूल्य >> @ नाम, yyyy दिनांक प्रारूप के लिए -एमएम-डीडी, #, ## 0.00; - #, ## मुद्रा के लिए 0.00, आदि ....

संबंधित मुद्दे