2016-05-11 16 views
6

Trước đó tôi đã sử dụng Apache POI 2.5.1 để xuất tệp .xls sử dụng HSSFWorkbook. Với cập nhật Apache POI thành 3.13 Tôi đang xuất .xlsx tệp bằng cách sử dụng SXSSFWorkbook nhưng tệp xuất bị hỏng.Xuất xlsx bằng apache poi 3.13 trên weblogic: Định dạng tệp hoặc phần mở rộng không hợp lệ

MS Excel không thể mở tệp với Định dạng tệp hoặc tiện ích không hợp lệ lỗi.

Lưu ý rằng vấn đề này tôi chỉ gặp phải trên máy chủ WebLogic, nó hoạt động tốt với JBoss.

Bất kỳ ai cũng có thể giúp những gì tôi đang làm sai ở đây?

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

nỗ lực không thành công:

  1. Cập nhật loại mime trong tiêu đề phản hồi từ application/vnd.ms-excel để vnd.openxmlformats-officedocument.spreadsheetml.sheet
  2. Added xlsx=vnd.openxmlformats-officedocument.spreadsheetml.sheet trong tùy chỉnh tập tin bản đồ kịch câm cho WebLogic
+0

Phiên bản weblog nào? 12.1.3? – Slettal

+1

@Slettal 10.3.5.0 –

+2

được, mã của bạn hoạt động tốt mà không gặp sự cố gì trên WL 12.1.3. Không cài đặt 10.3.5: ( – Slettal

Trả lời

Các vấn đề liên quan