2016-05-11 7 views
6

Früher habe ich mit Apache POI 2.5.1 .xls Datei mit HSSFWorkbook exportieren. Mit aktualisierten Apache POI zu 3.13 exportiere ich .xlsx Datei mit SXSSFWorkbook, aber seine Datei exportiert.Exportieren von XLSX mit Apache Poi 3.13 auf Weblogic: Dateiformat oder Erweiterung nicht gültig

MS Excel konnte Datei mit nicht öffnen Dateiformat oder Erweiterung nicht gültig Fehler.

Beachten Sie, dass dieses Problem ich nur auf WebLogic Server gegenüberstehen, funktioniert es gut mit JBoss.

Jeder kann helfen, was ich hier falsch mache?

Code:

List<JRField> fields = ds.getFields(); 
    SXSSFWorkbook wb = new SXSSFWorkbook(); 
    SXSSFSheet sheet = wb.createSheet("Sheet1"); 

    try { 
     CellStyle cellStyle   = wb.createCellStyle(); 
     CellStyle cellStyleColName = wb.createCellStyle(); 
     CellStyle cellStyleTitle = wb.createCellStyle(); 

     Font boldFont = wb.createFont(); 
     boldFont.setFontHeightInPoints((short)16); 
     boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 

     // Cell Style for body 
     cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)")); 
     cellStyle.setWrapText(true); 

     // Cell Style for Column Names 
     cellStyleColName.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)")); 
     cellStyleColName.setAlignment(HSSFCellStyle.ALIGN_CENTER); 
     cellStyleColName.setBorderTop(HSSFCellStyle.BORDER_MEDIUM); // single line border 
     cellStyleColName.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); // single line border 

     // Cell Style for Title 
     cellStyleTitle.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)")); 
     cellStyleTitle.setAlignment(HSSFCellStyle.ALIGN_CENTER); 
     cellStyleTitle.setFont(boldFont); 

     // Creating Title Row 
     Row row1 = sheet.createRow((short) 0); 

     // Creating the Title line 
     Cell cell1 = row1.createCell((short) 0); 
     cell1.setCellValue("Demo Title"); 
     cell1.setCellStyle(cellStyleTitle); 

     // Title Region 
     CellRangeAddress regionTitle = new CellRangeAddress( (short) 0,  // From Row 
       (short) 0,         // From Col 
       (short) 0,         // To Row 
       (short) (this.displayCols.size()-1)   // To Col 

     ); 
     sheet.addMergedRegion(regionTitle); 

     // Column Name Row 
     int j =0; 
     Row row2 = sheet.createRow((short) 1); 
     for (ReportColumn col : this.displayCols) 
     { 
      Cell cell2 = row2.createCell((short) j++); 
      cell2.setCellValue(col.getDisplayName()); 
      cell2.setCellStyle(cellStyleColName); 
     } 

     int i =2; 
     while (ds.next()) { 
      Row rows = sheet.createRow((short) 0 + i); 
      int k = 0; 
      for (JRField field : fields) { 
       String fieldAsString = (ds.getFieldValue(field) != null ? ds.getFieldValue(field).toString():null); 
       Cell cell = rows.createCell((short) k++); 
       cell.setCellStyle(cellStyle); 
       cell.setCellValue(fieldAsString); 
      } 
      i++; 
      if (i > RECORD_LIMIT_FROM_POI){ 
       log.info("Row limit from poi reached #1048576 and exported data is truncated."); 
       break; 
      } 
     } 

     wb.write(os); 
    } 
    catch (Exception e) { 
     log.error("error in createXlsFile method", e); 
    } 

Fehlversuche:

  1. Aktualisiert Mime-Typ in Antwort-Header von application/vnd.ms-excel zu vnd.openxmlformats-officedocument.spreadsheetml.sheet
  2. Added xlsx=vnd.openxmlformats-officedocument.spreadsheetml.sheet in benutzerdefinierten Mime-Zuordnungsdatei für WebLogic
+0

Welche Version weblogic? 12.1.3? – Slettal

+1

@Slettal sein 10.3.5.0 –

+2

okay, gut Ihr Code funktioniert ohne Probleme auf einer WL 12.1.3. Keine 10.3.5 Installation :( – Slettal

Antwort