मैं जैस्पर रिपोर्ट रिपोर्ट पर काम कर रहा हूं जो एक्सेल फ़ाइल उत्पन्न करता है। किसी कारण से मेरे सेल प्रारूप/प्रकार इस प्रकार नहीं हैं कि वे कैसे होना चाहिए। उदाहरण के लिए मेरे पास मेरे सेल में डेट ऑब्जेक्ट है लेकिन जब मैं एक्सेल फ़ाइल जेनरेट करता हूं तो यह सेल टाइप को नंबर पर सेट करता है, या लांग टाइप सेल में टेक्स्ट होता है लेकिन सेल का प्रारूप नंबर होता है और जब उपयोगकर्ता डेट सेल संपादित करता है (उदाहरण के लिए दिनांक 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 टेम्पलेट फ़ाइल पैदा कर रहा हूँ कृपया मुझे मत पूछो, कि मैं इसे कैसे की जरूरत है।)
तो आप जो कह रहे हैं वह है कि जब यह ध्वज एक्सेल में सेल पर होता है तो तारीख के प्रकार के रूप में सही ढंग से पहचान नहीं होगा। जब यह FALSE संख्या फ़ील्ड पर सेट होता है तो गलत हो जाता है। तो, मैं दोनों प्रकार के काम कैसे ठीक कर सकता हूं मैं xlsx? – tropikalista