当前位置: 首页 > news >正文

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 内部使用)
NUMERIC0数值类型(包括整数、小数、日期/时间等,Excel 中日期存储为数值)
STRING1字符串类型(通过 setCellValue("text") 设置的文本,或富文本单元格)
FORMULA2公式类型(单元格包含公式,如 =A1+B1,通过 getCachedFormulaResultType() 获取结果类型)
BLANK3空白单元格(无内容,但可能有格式,如背景色)
BOOLEAN4布尔类型(值为 TRUEFALSE
ERROR5错误值类型(如 #VALUE!#DIV/0! 等错误码)

相关文章:

  • 【Deepseek基础篇】--v3基本架构
  • 【SLAM】将realsense-viewer录制的rosbag视频导出成图片序列(RealSense D435)
  • 二分算法的入门笔记
  • Linuix基础11
  • Python:开启自动化办公与游戏开发的无限可能
  • mybatis plus 分页查询出来数据后对他二次 修改数据 封装返回
  • JAVA EE_多线程-初阶(三)
  • 驱动开发硬核特训 · Day 6 : 深入解析设备模型的数据流与匹配机制 —— 以 i.MX8M 与树莓派为例的实战对比
  • 第十六届蓝桥杯大赛软件赛省赛 Python 大学 B 组 部分题解
  • 辛格迪客户案例 | 西藏奇正藏药MES项目
  • 【Docker基础】深入解析 Docker 存储卷:管理、绑定与实战应用
  • 安宝特新闻丨Vuzix Core™波导助力AR,视角可调、高效传输,优化开发流程
  • echarts地图添加涟漪波纹点位
  • PostgreSQL技术大讲堂 - 第86讲:数据安全之--data_checksums天使与魔鬼
  • 多模态学习分析(MLA)驱动高中差异化教学策略研究
  • 单卡4090微调大模型 DeepSeek-R1-32B
  • 人工智能时代教育主体性的哲学反思与技术治理
  • 【PostGresql】-----PG按本月、本年数据统计并且行数据转列字段数据查询
  • Kubernetes-如何进入某POD中
  • (六)深入了解AVFoundation-播放:AirPlay、画中画后台播放
  • 网站建设动态静态/最新发布的最新
  • 石家庄人力资源和社会保障局/二十条优化疫情措施
  • 个人网站设计图片/seo搜索优化专员
  • 廊坊做网站企业教程/电商培训机构靠谱吗
  • 网站备案负责人一定要法人/百度网站收录提交
  • 有没有做文创的网站/2022当下社会热点话题