Poi实现excel报表导入,通过原始poi实现可应对各种格式的报表

如果你清楚原始poi操作Excel导出的操作,那么导入的操作就很简单了,之前写了利用poi操作excel实现复杂表格导出,可以快速了解导出操作!!!

传送门:Poi实现复杂Excel导出,理解POI操作Excel思路!!!

思路

思路和poi导出一样,核心五步

1、获取workbook,XSSFWorkbook创建的是.xlsx后缀文件,HSSFWorkbook创建的是.xls后缀文件

XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());

2、根据workboot获取sheet

XSSFSheet sheet = workbook.getSheetAt(0);

3、根据sheet获取行

XSSFRow row = sheet.getRow(0);

4、根据行获取单元格

XSSFCell cell = row.getCell(0);

5、根据单元格获取数据

String value = cell.getRichStringCellValue()

代码

public String importExcel(MultipartFile file) throws IOException {
    // 获取workboot
    XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
    // 获取sheet,0代表获取一个sheet
    XSSFSheet sheet = workbook.getSheetAt(0);
    // 获取一共有多少行数据
    int lastRowNum = sheet.getLastRowNum();
    // 接收excel数据
    List<Map<String, String>> list = new ArrayList<>();
    // 数据是从第四行开始
    for (int i = 3; i < lastRowNum; i++) {
        Map<String, String> map = new LinkedHashMap<>();
        // 获取当前行
        XSSFRow row = sheet.getRow(i);
        // 一共六列数据
        List<String> data = new ArrayList<>();
        for (int j = 0; j < 6; j++) {
            // 获取当前行一个单元格
            XSSFCell cell = row.getCell(j);
            // 获取该单元格数据
            String value = getCellValue(cell);
            data.add(value);
        }
        // 将data数据封装到map
        map.put("编号", data.get(0));
        map.put("姓名", data.get(1));
        map.put("年龄", data.get(2));
        map.put("兴趣1", data.get(3));
        map.put("兴趣2", data.get(4));
        map.put("兴趣3", data.get(5));
        list.add(map);
    }
    // 输出map
    System.out.println(JSONUtil.toJsonStr(list));
    return JSONUtil.toJsonStr(list);
}

public static String getCellValue(Cell cell) {
    if (Objects.isNull(cell)) {
        return "";
    }
    CellType cellType = cell.getCellType();
    //字符串
    if(cellType.equals(CellType.STRING)){
        return cell.getRichStringCellValue().getString();
    }else if(cellType.equals(CellType.NUMERIC)){
        //数值
        if (DateUtil.isCellDateFormatted(cell)) {
            //日期类型
            return cell.getDateCellValue() + "";
        } else {
            //数值类型
            return cell.getNumericCellValue() + "";
        }
    }else if(cellType.equals(CellType.BOOLEAN)){
        //布尔类型
        return cell.getBooleanCellValue()? "TRUE" : "FALSE";
    } else if (cellType.equals(CellType.FORMULA)) {
        return cell.getCellFormula() + "";
    } else {
        return "";
    }
}

导出结果:

总结,想要获取某个单元格数据,现获取当前行,在获取当前行当前列,定位到之后得判断该单元格数据是什么格式,不同的格式需要不同的方法获取值。

相关推荐

  1. 使用POI技术实现excel文件导入

    2023-12-21 10:48:02       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-21 10:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-21 10:48:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-21 10:48:02       82 阅读
  4. Python语言-面向对象

    2023-12-21 10:48:02       91 阅读

热门阅读

  1. 讲诉JVM

    2023-12-21 10:48:02       58 阅读
  2. QML基础类型之Size - 编程指南

    2023-12-21 10:48:02       64 阅读
  3. qiankun(乾坤)微前端框架简介

    2023-12-21 10:48:02       48 阅读
  4. 基于分裂Bregman算法的图像去噪实现

    2023-12-21 10:48:02       56 阅读
  5. 使用Spark GraphX进行图形处理的代码练习

    2023-12-21 10:48:02       56 阅读
  6. 大数据学习(29)-spark on yarn底层原理

    2023-12-21 10:48:02       56 阅读
  7. 什么是类加载器,类加载器有哪些

    2023-12-21 10:48:02       51 阅读
  8. sklearn和tensorflow的理解

    2023-12-21 10:48:02       55 阅读
  9. 51单片机控制1602LCD输出整数和浮点数

    2023-12-21 10:48:02       61 阅读
  10. Linux 文本处理

    2023-12-21 10:48:02       61 阅读
  11. SQLite数据库的增删改查

    2023-12-21 10:48:02       60 阅读
  12. work随笔记录(实时更新)

    2023-12-21 10:48:02       60 阅读