Springboot导入excel核心代码及采坑注意点

excel导入导出引入的是poi 4.x包,这个应该是目前java当中用的最为普遍的excel处理工具包,最近比较火的easyexcel实际上也是基于poi封装的

废话不多说,直接上核心代码:

@RequestMapping("budgetImport")
@ResponseBody
public Response budgetImport(@RequestParam("file") MultipartFile file) throws Exception {
    String fileName = file.getOriginalFilename();
    if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
        return Response.failure("文件格式不正确");
    }
    boolean isExcel2003 = true;
    if (fileName.matches("^.+\\.(?i)(xlsx)$")) {
        isExcel2003 = false;
    }
    InputStream is = file.getInputStream();
    Workbook wb = null;
    if (isExcel2003) {
        wb = new HSSFWorkbook(is);
    } else {
        wb = new XSSFWorkbook(is);
    }
    Sheet sheet = wb.getSheetAt(0);
    for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {
        .....
    }
    return Response.success(sheet.getPhysicalNumberOfRows());
}

踩过的坑1:Sheet sheet = wb.getSheetAt(0);

这一行代码实际上很简单,就是get第一个sheet,但是这里会有个坑,就是如果这个excel文件中有很多个sheet,但是有一些隐藏的sheet,那么这一行代码可能并不是你想要get的那个sheet,比如假设有ABC三个sheet,其中B是你想要get的,然后AC被隐藏了(这时候你打开这个excel文件的时候第一眼看到的虽然是B),但是这一行代码实际上获取的是A这个sheet,解决办法是把AC显示出来然后干掉,或者把A跟B调换位置,那么wb.getSheetAt(0)就能取到B这个sheet了,如何显示隐藏的sheet呢,如图:

 踩过的坑2:sheet.getLastRowNum() 会出现读取到的行数比实际要少一行,改用sheet.getPhysicalNumberOfRows()即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值