Spring Boot 集成 POI

Spring Boot 集合 POI

Apache POI 官站:https://poi.apache.org/

基础概念

Apache POI 是一个开源项目,提供 Java API 用于操作 Microsoft Office 文件格式。Apache POI 对 Excel 文件的处理分为两个主要类库:

  • HSSF (Horrible Spreadsheet Format):用于处理 Excel 97-2003 文件格式 (.xls)。
  • XSSF (XML Spreadsheet Format):用于处理 Excel 2007 及以上版本文件格式 (.xlsx)。

具体到 Excel 文件的处理,POI 提供了一些核心对象以支持对工作簿、工作表、单元格的操作:

  • Workbook:表示一个 Excel 文件。
  • Sheet:表示一个工作表,可以包含多个 Sheet。
  • Row:表示工作表中的一行。
  • Cell:表示行中的一个单元格。

添加依赖

<!-- 引入【Apache POI】依赖 集成POI操作excel使用-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.1</version>
</dependency>

POI 写操作

简单写入导出
@Test
public void easyOutPutExcelTest() throws Exception {
    // 1. 创建 Excel 文件(工作簿)
    XSSFWorkbook workbook = new XSSFWorkbook();

    //2.创建工作表(并给sheet取名”)
    XSSFSheet sheet = workbook.createSheet("大铁锤de数据表");

    // 3.创建excel行,填充数据(示例)
    XSSFRow row = sheet.createRow(0);
    row.createCell(0).setCellValue("时间");
    row.createCell(1).setCellValue(DateUtils.getDateString());

    XSSFRow row1 = sheet.createRow(1);
    row1.createCell(0).setCellValue("地点");
    row1.createCell(1).setCellValue("深圳市南山区");

    // 3. 获取桌面路径(Windows/Mac/Linux 通用)
    String desktopPath = System.getProperty("user.home") + "/Desktop/大铁锤de数据表.xlsx";

    // 4. 保存到桌面
    try (FileOutputStream outputStream = new FileOutputStream(desktopPath)) {
        workbook.write(outputStream);
    }
    workbook.close();
    System.out.println("文件已保存到桌面!");
}
自定义写入导出
@Test
public void testCustomWriteExportExcel() {
    //获取下载路径(Windows/Mac/Linux 通用)
    String desktopPath = System.getProperty("user.home") + "/Desktop/自定义写入导出.xlsx";
    try (XSSFWorkbook workbook = new XSSFWorkbook();
         FileOutputStream fileOut = new FileOutputStream(desktopPath)) {
        XSSFSheet sheet = workbook.createSheet();
        //创建表头行
        XSSFRow headerRow = sheet.createRow(0);
        //创建表头单元格样式
        XSSFCellStyle headerStyle = workbook.createCellStyle();
        //设置背景色 - 使用RGB颜色
        headerStyle.setFillForegroundColor(new XSSFColor(new byte[]{(byte) 255, (byte) 184, (byte) 77}, null));
        headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

        //创建字体
        XSSFFont headerFont = workbook.createFont();
        headerFont.setBold(true);
        headerStyle.setFont(headerFont);

        // 创建表头单元格并应用样式
        String[] headers = {"编号", "姓名", "年龄", "工作", "地址"};
        for (int i = 0; i < headers.length; i++) {
            XSSFCell cell = headerRow.createCell(i);
            cell.setCellValue(headers[i]);
            cell.setCellStyle(headerStyle);
        }

        workbook.write(fileOut);
        System.out.println("文件已保存到桌面!");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
大量数据写入导出
@Test
public void writBigDataTestSuper() throws Exception{
    long begin = System.currentTimeMillis();
    //1.创建工作簿   SXSSFWorkbook——(耗时比较短,适合大量数据操作)
    SXSSFWorkbook workbook = new SXSSFWorkbook();
    //创建工作表
    SXSSFSheet sheet = workbook.createSheet();

    for (int rowNum = 0; rowNum < 100000; rowNum++) {
        SXSSFRow row = sheet.createRow(rowNum);
        row.createCell(0).setCellValue("时间");
        row.createCell(1).setCellValue(DateUtils.getDateString());
    }
    String desktopPath = System.getProperty("user.home") + "/Desktop/大铁锤大数据表.xlsx";
    try (FileOutputStream outputStream = new FileOutputStream(desktopPath)) {
        workbook.write(outputStream);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        workbook.close();  // ✅ 清理临时文件,确保 workbook 被关闭(即使在写入时发生异常)
    }
    long end = System.currentTimeMillis();
    System.out.println("文件已保存到桌面!使用【SXSSFWorkbook】工作簿耗时:"+(double)(end-begin)/1000+"秒");
}

POI 读操作

简单导入操作
@Test
public void easyReadDateExcelTest() throws IOException {

    //获取文件流
    FileInputStream inputStream = new FileInputStream(System.getProperty("user.home") + "/Desktop/大铁锤de数据表.xlsx");
    //1.创建一个工作簿,使用excel 能操作的都可以在HSSFWorkbook对象中设置
    try (Workbook workbook = new XSSFWorkbook(inputStream)) {
        //得到表
        Sheet sheet = workbook.getSheetAt(0);
        //得到行
        Row row = sheet.getRow(0);
        //得到列
        Cell cell = row.getCell(1);
        //获取垓值
        System.out.println(cell.getStringCellValue());
        inputStream.close();
    }
}

常用注解

CellType 枚举类注释
枚举值

含义
_NONE -1 内部保留类型(不直接对应 Excel 单元格类型,POI 内部使用)
NUMERIC 0 数值类型(包括整数、小数、日期/时间等,Excel 中日期存储为数值)
STRING 1 字符串类型(通过 setCellValue("text") 设置的文本,或富文本单元格)
FORMULA 2 公式类型(单元格包含公式,如 =A1+B1,通过 getCachedFormulaResultType() 获取结果类型)
BLANK 3 空白单元格(无内容,但可能有格式,如背景色)
BOOLEAN 4 布尔类型(值为 TRUEFALSE
ERROR 5 错误值类型(如 #VALUE!#DIV/0! 等错误码)

你可能感兴趣的:(Springboot,spring,boot,后端,java)