1小时!POI与easyExcel 从入门到精通

一、POI和easyExcel

  1. 运用场景:
    • 导出数据为Excel
    • 将Excel中的信息录入到数据库中
    • 操作Excel流行的就是Apache POI 和 阿里巴巴的 easyExcel
  2. 什么是POI?
    POI是开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能

    • 基本功能:
      file

    • 原生的相对来说比较复杂

  3. EasyExcel

二、POI-Excel写操作

  1. 导入依赖
    <!--xls03-->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.16</version>
    </dependency>
    <!--xls07-->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.14</version>
    </dependency>
    <!--时间格式化-->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10.5</version>
    </dependency>
    • 03版的Excel最多可以放入65 536条数据,但是新版的是没有条数限制的
    • 03版的后缀是xls,07版是xlsx
  2. 基本概念
    file
  3. 创建步骤
    • 工作蒲--工作表---行---列(单元格)
      file
    • 03版表格输出
      // 1.创建工作蒲
      HSSFWorkbook workbook = new HSSFWorkbook();
      // 2.创建工作表
      Sheet sheet = workbook.createSheet("统计表");
      // 3.创建行
      Row row1 = sheet.createRow(0);
      // 4.创建单元格
      Cell cell1 = row1.createCell(0);
      cell1.setCellValue("今日新增人数");
      Cell cell2 = row1.createCell(1);
      cell2.setCellValue(666);
      // 生成表(IO)
      FileOutputStream outputStream = new FileOutputStream(PATH + "/统计表03.xls");
      // 输出
      workbook.write(outputStream);
      System.out.println("Excel表格生成成功!");
      // 关闭Excel
      outputStream.close();
    • 07版表格输出
      // 1.创建工作蒲
      XSSFWorkbook workbook = new XSSFWorkbook();
      // 2.创建工作表
      Sheet sheet = workbook.createSheet("统计表");
      // 3.创建行
      Row row1 = sheet.createRow(0);
      // 4.创建单元格
      Cell cell1 = row1.createCell(0);
      cell1.setCellValue("今日新增人数");
      Cell cell2 = row1.createCell(1);
      cell2.setCellValue(666);
      // 生成表(IO)
      FileOutputStream outputStream = new FileOutputStream(PATH + "/统计表07.xlsx");
      // 输出
      workbook.write(outputStream);
      System.out.println("Excel表格生成成功!");
      // 关闭Excel
      outputStream.close();
    • 注意对象的区别和输出文件的格式后缀

三、POI大文件写

  1. 03版大数据写HSSF
    1. 实现
      ·long startTime = System.currentTimeMillis();
      HSSFWorkbook workbook = new HSSFWorkbook();
      HSSFSheet sheet = workbook.createSheet();
      for (int i = 0; i < 65536; i++) {
      Row row = sheet.createRow(i);
      for (int j = 0; j < 10; j++) {
          Cell cell = row.createCell(j);
          cell.setCellValue(j);
      }
      }
      FileOutputStream outputStream = new FileOutputStream(PATH + "/大数据03.xls");
      workbook.write(outputStream);
      System.out.println("03版表格生成成功");
      outputStream.close();
      long endTime = System.currentTimeMillis();
      System.out.println("03版消耗时间:" + (endTime - startTime));
    2. 速度快,但是只能写入65535条数据
  2. 07版大数据写XSSF
    1. 实现
      long startTime = System.currentTimeMillis();
      XSSFWorkbook workbook = new XSSFWorkbook();
      Sheet sheet = workbook.createSheet();
      for (int i = 0; i < 65536; i++) {
      Row row = sheet.createRow(i);
      for (int j = 0; j < 10; j++) {
          Cell cell = row.createCell(j);
          cell.setCellValue(j);
      }
      }
      FileOutputStream outputStream = new FileOutputStream(PATH + "/大数据07.xlsx");
      workbook.write(outputStream);
      System.out.println("07版表格生成成功");
      outputStream.close();
      long endTime = System.currentTimeMillis();
      System.out.println("07版消耗时间:" + (endTime - startTime));
    2. 速度慢,但是可以大量的写,理论上是无限的
  3. 快速版SXSSF
    1. 可以写非常大量的数据,写数据速度快,占用内存更少
    2. 需要注意
      1. 会产生临时文件,需要清理临时文件
      2. 默认先写100条记录保存在内存中,超过数量最前面的数据被写入临时文件
      3. 使用new SXSSFWorkbook(数量)可以自定义
    3. 实现
      long startTime = System.currentTimeMillis();
      SXSSFWorkbook workbook = new SXSSFWorkbook();
      Sheet sheet = workbook.createSheet();
      for (int i = 0; i < 65536; i++) {
      Row row = sheet.createRow(i);
      for (int j = 0; j < 10; j++) {
          Cell cell = row.createCell(j);
          cell.setCellValue(j);
      }
      }
      FileOutputStream outputStream = new FileOutputStream(PATH + "/大数据07Super.xlsx");
      workbook.write(outputStream);
      // 清除临时文件
      workbook.dispose();
      System.out.println("07Super版表格生成成功");
      outputStream.close();
      long endTime = System.currentTimeMillis();
      System.out.println("07Super版消耗时间:" + (endTime - startTime));

四、EasyExcel操作

  1. 参考地址:https://www.yuque.com/easyexcel/doc/easyexcel
  2. 导入依赖
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
        </dependency>
  3. 创建bean
    @ExcelProperty("字符串标题")
    private String string;
    @ExcelProperty("日期标题")
    private Date date;
    @ExcelProperty("数字标题")
    private Double doubleData;
    /**
     * 忽略这个字段
     */
    @ExcelIgnore
    private String ignore;
  4. 写操作

    private static final String PATH = "F:/springdemo";
    private List<EasyExcelDemoData> data() {
        List<EasyExcelDemoData> list = new ArrayList<EasyExcelDemoData>();
        for (int i = 0; i < 10; i++) {
            EasyExcelDemoData data = new EasyExcelDemoData();
            data.setString("字符串" + i);
            data.setDate(new Date());
            data.setDoubleData(0.56);
            list.add(data);
        }
        return list;
    }
    @Test
    public void easyExcelWrite() {
        String fileName = PATH + "/easyExcel测试.xlsx";
        EasyExcel.write(fileName, EasyExcelDemoData.class).sheet("模板").doWrite(data());
    
    }
讨论数量: 1

你的帖子和你的帅气的脸一样让人着迷!

4年前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!