gpt4 book ai didi

java - 在 weblogic : File format or extension not valid 上使用 apache poi 3.13 导出 xlsx

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:14 24 4
gpt4 key购买 nike

之前我使用 Apache POI 2.5.1 导出 .xls 文件,使用 HSSFWorkbook。将 Apache POI 更新到 3.13,我正在使用 SXSSFWorkbook 导出 .xlsx 文件,但它导出的文件已损坏。

MS Excel 无法打开文件,出现文件格式或扩展名无效错误。

请注意,我只在 WebLogic 服务器上遇到过这个问题,它在 JBoss 上运行良好。

任何人都可以帮助我在这里做错了什么?

代码:

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

失败的尝试:

  1. 更新了来自 application/vnd.ms-excel 的响应 header 中的 mime 类型到 vnd.openxmlformats-officedocument.spreadsheetml.sheet
  2. 在 WebLogic 的自定义 MIME 映射文件中添加了 xlsx=vnd.openxmlformats-officedocument.spreadsheetml.sheet

最佳答案

这可能会占用更多资源,但您尝试过吗:

XSSFWorkbook wb = new SXSSFWorkbook();
XSSFSheet sheet = wb.createSheet("Sheet1");

而不是 SXSSF。

此处各种类型之间有一些讨论:HSSFWorkbook vs XSSFWorkbook and the advantages/disadvantages of XSSFWorkbook and SXSSFWorkbook?

关于java - 在 weblogic : File format or extension not valid 上使用 apache poi 3.13 导出 xlsx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37159328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com