2016-05-11 50 views
6

Daha önce .xls dosyasını HSSFWorkbook kullanarak vermek için Apache POI 2.5.1 kullanıyordum. Güncelleştirilmiş Apache ile POI 3,13 Ben SXSSFWorkbook ama ihracat bozuk dosyayı kullanarak .xlsx dosya ihracat ediyorum.Weblogic'te apache poi 3.13 kullanarak xlsx dosyası dışa aktarılıyor: Dosya biçimi veya uzantısı geçerli değil

MS Excel, dosya açamadı Dosya biçimi ya da uzantısı geçerli değil.

Bu sorunun yalnızca WebLogic sunucusuna baktığımı unutmayın, JBoss ile düzgün çalışıyor.

Burada yanlış yaptığım şeylere kimse yardım edebilir mi?

Kodu:

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

Başarısız denemeler:

    WebLogic'te için özel mim haritalama dosyasında vnd.openxmlformats-officedocument.spreadsheetml.sheet
  1. için application/vnd.ms-excel gelen cevap başlığında
  2. Güncelleme mim tipi Eklendi xlsx=vnd.openxmlformats-officedocument.spreadsheetml.sheet
+0

:

burada çeşitli türleri arasında bazı tartışmalar vardır? 12.1.3? – Slettal

+1

@Slettal, onun 10.3.5.0 –

+2

tamam, iyi kodunuz WL 12.1.3 üzerinde sorunsuz çalışıyor. Bir 10.3.5 yüklemeniz yok :( – Slettal

cevap