poi版本升级 POI操作Excel文件,通过文件流判断Excel的版本.原来版本不能用

原始版本代码入下。

  if (POIFSFileSystem.hasPOIFSHeader(inputstream)) {
            book =  new HSSFWorkbook(inputstream);
            isXSSFWorkbook = false;
        }else if (POIXMLDocument.hasOOXMLHeader(inputstream)) {
            book =  new XSSFWorkbook(OPCPackage.open(inputstream));
        }

升级版本后提示POIXMLDocument.hasOOXMLHeader不是方法。

改为如下:

WorkbookFactory.create(inputstream);

在WorkbookFactory中有逻辑进行了对excel版本的判断。

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,针对你的问题,我可以给出一些解决方案和建议: 1. POI 4.x 版本中,单元格内容类型的判断和取值方式发生了变化。可以使用新的 `DataFormatter` 类来获取单元格的值,示例代码如下: ``` DataFormatter dataFormatter = new DataFormatter(); String cellValue = dataFormatter.formatCellValue(cell); ``` 2. 如果你需要判断单元格的内容类型,可以使用新的 `CellType` 枚举类型,示例代码如下: ``` CellType cellType = cell.getCellType(); if (cellType == CellType.STRING) { String cellValue = cell.getStringCellValue(); // do something } else if (cellType == CellType.NUMERIC) { double cellValue = cell.getNumericCellValue(); // do something } else if (cellType == CellType.BOOLEAN) { boolean cellValue = cell.getBooleanCellValue(); // do something } else { // other types } ``` 3. 如果你使用的是旧版本POI,可以考虑升级到 4.x 版本。如果无法升级,可以使用以下代码来获取单元格的值: ``` if (cell.getCellType() == Cell.CELL_TYPE_STRING) { String cellValue = cell.getStringCellValue(); // do something } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { double cellValue = cell.getNumericCellValue(); // do something } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { boolean cellValue = cell.getBooleanCellValue(); // do something } else { // other types } ``` 4. 如果你使用的是 Excel 2007 及以上版本文件,可以考虑使用 XSSF 格式的工作簿,示例代码如下: ``` XSSFWorkbook workbook = new XSSFWorkbook(inputStream); XSSFSheet sheet = workbook.getSheetAt(0); XSSFRow row = sheet.getRow(0); XSSFCell cell = row.getCell(0); String cellValue = cell.getStringCellValue(); ``` 希望以上建议可以帮助到你解决问题。如果还有其他疑问或需求,可以继续提出来哦。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值