Apache POI快速入门

介绍

Apache POl是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。

一般情况下,POI都是用于操作 Excel 文件。

Apache POI的主要组件包括:

  • HSSF(Horrible SpreadSheet Format):用于操作Excel文件的.xls格式。
  • XSSF(XML SpreadSheet Format):用于操作Excel文件的.xlsx格式。
  • HWPF(Horrible Word Processor Format):用于操作Word文件的.doc格式。
  • XWPF(XML Word Processor Format):用于操作Word文件的.docx格式。
  • HSLF(Horrible SlideShow Format):用于操作PowerPoint文件的.ppt格式。
  • XSLF(XML SlideShow Format):用于操作PowerPoint文件的.pptx格式。

Apache POI的应用场景:

  • 银行网银系统导出交易明细
  • 各种业务系统导出Excel报表
  • 批量导入业务数据

使用步骤

  1. 导入Apache POI的maven坐标
java 复制代码
	    <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
  1. 将数据写入到Excel文件中
java 复制代码
/**
     * 创建并写入Excel文件的方法
     * 此方法创建一个Excel工作簿,添加一张工作表,并写入一些数据,最后将工作簿保存到指定的文件路径
     * @throws Exception 如果在文件写入过程中发生错误,则可能抛出异常
     */
    public static void write() throws Exception {
        // 创建一个Excel工作簿
        XSSFWorkbook sheets = new XSSFWorkbook();
        
        // 创建一张名为"jacky"的工作表
        XSSFSheet sheet = sheets.createSheet("jacky");
        
        // 创建第一行,并在该行的第1、2列写入表头信息
        XSSFRow row = sheet.createRow(1);
        row.createCell(1).setCellValue("名字");
        row.createCell(2).setCellValue("年龄");
        
        // 创建第二行,并在该行的第1、2列写入名字和年龄数据
        row = sheet.createRow(2);
        row.createCell(1).setCellValue("jacky");
        row.createCell(2).setCellValue(18);
        
        // 创建第三行,并在该行的第1、2列写入名字和年龄数据
        row = sheet.createRow(3);
        row.createCell(1).setCellValue("tom");
        row.createCell(2).setCellValue(19);
    
        // 创建文件输出流,用于将Excel工作簿写入到E盘的test.xlsx文件
        FileOutputStream fileOutputStream = new FileOutputStream(new File("E:\\test.xlsx"));
        
        // 将Excel工作簿写入到输出流中
        sheets.write(fileOutputStream);
        
        // 刷新输出流,确保所有数据被写入文件
        fileOutputStream.flush();
        
        // 关闭输出流,释放系统资源
        fileOutputStream.close();
        
        // 关闭Excel工作簿,释放系统资源
        sheets.close();
    }

代码运行后生成的Excel表格如下:

  1. 读取Excel文件中的数据
java 复制代码
 /**
     * 从Excel文件中读取数据并打印
     * 此方法演示了如何使用Apache POI库读取Excel文件的特定工作表中的数据
     * 它打开了一个Excel文件,读取了工作表中指定列的数据,并将其打印到控制台
     * 
     * @throws Exception 如果文件输入输出操作或Excel文件处理中发生错误
     */
    public static void read() throws Exception {
        // 创建FileInputStream以打开指定路径的Excel文件
        FileInputStream fileInputStream = new FileInputStream(new File("E:\\test.xlsx"));
        
        // 创建XSSFWorkbook对象以打开Excel工作簿
        XSSFWorkbook sheets = new XSSFWorkbook(fileInputStream);
        
        // 获取名为"jacky"的工作表
        XSSFSheet sheet = sheets.getSheet("jacky");
        
        // 获取工作表中的最后一行号,用于遍历所有数据行
        int lastRowNum = sheet.getLastRowNum();
        
        // 获取第一行数据,用于后续的逻辑判断
        XSSFRow row = sheet.getRow(1);
        
        // 读取并存储第一行的指定列的字符串类型单元格值
        String stringCellValue1 = row.getCell(1).getStringCellValue();
        String stringCellValue2 = row.getCell(2).getStringCellValue();
        
        // 打印读取到的字符串类型单元格值
        System.out.println(stringCellValue1 + ":" + stringCellValue2);
        
        // 遍历工作表中的所有数据行,从第二行开始,因为第一行通常为标题行
        for (int i = 2; i <= lastRowNum; i++) {
            // 获取当前行
            row = sheet.getRow(i);
            
            // 读取当前行的指定列的字符串类型单元格值
            String stringCellValue = row.getCell(1).getStringCellValue();
            
            // 读取当前行的指定列的数字类型单元格值
            double numericCellValue = row.getCell(2).getNumericCellValue();
            
            // 打印读取到的字符串类型和数字类型单元格值
            System.out.println(stringCellValue + ":" + numericCellValue);
        }
        
        // 关闭FileInputStream和XSSFWorkbook以释放资源
        fileInputStream.close();
        sheets.close();
    }

代码运行后控制台的输出结果如下:

相关推荐
todoitbo17 小时前
把 XAMPP 搬到鸿蒙 PC:在鸿蒙 PC 上跑 Apache httpd 2.4.69实战项目
华为·apache·harmonyos·鸿蒙·开源鸿蒙·鸿蒙pc
AI行业应用研究18 小时前
会务系统的查询路径设计:从菜单导航到意图检索,多大规模的活动该配 AI 助理?
人工智能·apache
超龄超能程序猿1 天前
Apache Guacamole 入门指南
apache
豆角焖肉2 天前
Apache POI 实现 Excel 上传解析、导出
apache·poi·multipartfile·excel 导入导出·批量导入
nvd113 天前
深入剖析:GCP Pub/Sub 与 Apache Kafka 对消息处理延迟与消费者卡死的处理机制异同
分布式·kafka·apache
白帽攻防录3 天前
SRC 挖洞:Apache APISIX 非规范路径授权绕过深度复盘,CVE-2026-94269 怎么绕过网关访问后端
网络安全·apache·src漏洞挖掘
Knight_AL3 天前
从 EasyExcel 到 Apache Fesod:Java Excel 处理生态的一次重构
java·apache·excel
心易行者5 天前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache
文慧的科技江湖10 天前
2026年10月4日充电桩行业晚报:当“只充80%“成为通行规则,行业开始管单车占桩时长 | 慧知开源充电桩平台
开源·apache·新能源·虚拟电厂·充电桩·ocpp·v2g
nvd1112 天前
# 从 192 秒到 13 秒:Apache Flink 批处理极速调优实战记录
大数据·flink·apache