【POI Excel导入模板】

        本篇是导入相关模板,入口参数为被导入文件的地址。此demo支持一个sheet的导入,若需要多个sheet需要调整下参数,请大家自行验证。
        此篇demo需引入POI相关依赖,依赖为poi-ooxml的4.1.2版本。
        在方法getWorkbook中,会涉及到一些枚举类的使用。大家不必过于纠结,这个枚举类实际上就是对03和07版本Excel后缀的封装。
        下面是本导入demo的模板,如果大家需要POI的导出模板,在文末有相关连接,大家自取。


/**
 * @Description : 导入excel - poi-ooxml V4.1.2
 * @Author : Future Buddha
 * @Date: 2022-04-14 10:21
 */
@Slf4j
public class ImportExcelUtil {

    /**
     * 导入方法入口
     * @param filePath 导入文件路径地址
     * @return 
     * @throws BizException
     */
    public static List<List<String>> importExcel(String filePath) throws BizException {

        Workbook wookbook = getWorkbook(filePath);
        if (Objects.isNull(wookbook)) {
            return Lists.newArrayList();
        }
        List<List<String>> list = Lists.newArrayList();
        int numberOfSheets = wookbook.getNumberOfSheets();
        //遍历sheet - 此例中只有一个sheet
        for (int i = 0; i < numberOfSheets; i++) {
            if (i > 0) {
                break;
            }
            //获取第一个sheet
            Sheet sheet = wookbook.getSheetAt(i);
            if (Objects.isNull(sheet)) {
                continue;
            }
            //获取第一行和最后一行
            int firstRowNum = sheet.getFirstRowNum();
            int lastRowNum = sheet.getLastRowNum();
            //遍历row并获取改行个单元格的值
            for (int j = firstRowNum; j < lastRowNum; j++) {
                Row row = sheet.getRow(j);
                if (Objects.isNull(row)) {
                    continue;
                }
                List<String> objs = Lists.newArrayList();
                short firstCellNum = row.getFirstCellNum();
                short lastCellNum = row.getLastCellNum();
                for (int m = firstCellNum; m < lastCellNum; m++) {
                    Cell cell = row.getCell(m);
                    String obj = getCellVal(cell);
                    objs.add(obj);
                }
                list.add(objs);
            }
        }
        return list;
    }

    /**
     * 获取该单元格的值
     * @param cell
     * @return
     */
    private static String getCellVal(Cell cell) {
        CellType cellTypeEnum = cell.getCellTypeEnum();
        String value;
        switch (cellTypeEnum) {
            case STRING:
                value =  cell.getStringCellValue();
                break;
            case NUMERIC:
                if(DateUtil.isCellDateFormatted(cell)){
                    value = TimeFormatUtil.dataToString(DateUtil.getJavaDate(cell.getNumericCellValue()));
                }else{
                    value = String.valueOf(cell.getNumericCellValue());
                }
                break;
            case BOOLEAN:
                value = String.valueOf(cell.getBooleanCellValue());
                break;
            case FORMULA:
                value = cell.getCellFormula();
                break;
            case _NONE:
            case BLANK:
            case ERROR:
            default:
                value = "";
        }
        return value;
    }

    /**
     * 创建基于路径下Excel的Workbook对象
     * @param filePath
     * @return
     */
    private static Workbook getWorkbook(String filePath) {
        String fileType = filePath.substring(filePath.lastIndexOf(".") + 1);
        Workbook workbook;
        try {
            if (Objects.equals(ExcelSuffixEnum.XLS.getSuffix(), fileType)) {
                workbook = new HSSFWorkbook(new FileInputStream(new File(filePath)));
            } else if (Objects.equals(ExcelSuffixEnum.XLSX.getSuffix(), fileType)) {
                workbook = new XSSFWorkbook(new FileInputStream(new File(filePath)));
            } else {
                throw new BizException(USER_REQUIRE_FILE_FORM_NON_MATCH_EXCEPTION.detailMsg(filePath));
            }
        } catch (FileNotFoundException e) {
            log.error(USER_REQUIRE_FILE_NON_EXIST_EXCEPTION.getReason(), e);
            throw new BizException(USER_REQUIRE_FILE_NON_EXIST_EXCEPTION);
        } catch (IOException e) {
            log.error(SYSTEM_IO_EXCEPTION.getReason(), e);
            throw new BizException(SYSTEM_IO_EXCEPTION);
        }
        return workbook;
    }

}

导出demo相关icon-default.png?t=M3K6https://blog.csdn.net/u011528738/article/details/123157236?spm=1001.2014.3001.5502

微信扫码订阅
UP更新不错过~
关注
  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:创作都市 设计师:CSDN官方博客 返回首页
评论

打赏作者

黄土地的孩子

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值