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();
    }

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

相关推荐
倔强的石头10615 小时前
边缘侧时序数据的选型指南:网络不稳定、数据不丢、回传可控——用 Apache IoTDB 设计可靠链路
网络·apache·iotdb
A-刘晨阳18 小时前
2026年时序数据库选型指南:从大数据视角深度解析Apache IoTDB的技术优势与实践路径
大数据·apache·时序数据库
todoitbo18 小时前
时序数据库选型指南:面向工业物联网的工程视角,以 Apache IoTDB 为例
物联网·apache·时序数据库·iotdb
枫叶丹419 小时前
时序数据库选型指南:在大数据浪潮中把握未来,为何Apache IoTDB值得关注?
大数据·数据库·apache·时序数据库·iotdb
wei_shuo21 小时前
国产时序数据库的云原生实践:Apache IoTDB 与 TimechoDB 在物联网场景的深度应用
云原生·apache·时序数据库
Aloudata2 天前
数据治理选型对比:Apache Atlas vs 商业平台在存储过程解析与自动化治理的实测分析
数据挖掘·自动化·apache·元数据·数据血缘
世界尽头与你2 天前
CVE-2017-5645_ Apache Log4j Server 反序列化命令执行漏洞
网络安全·渗透测试·log4j·apache
迎仔2 天前
03-Apache Tez 通俗指南:MapReduce 的“高速公路”升级包
大数据·apache·mapreduce
世界尽头与你2 天前
CVE-2025-55752_ Apache Tomcat 安全漏洞
java·安全·网络安全·渗透测试·tomcat·apache
HMX4042 天前
【春秋云境】CVE-2025-44137 TileServer PHP v2.0任意文件读取漏洞
apache·安全漏洞·漏洞复测