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

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

相关推荐
源图客1 天前
Apache Flink 2.3.0(最新版本)
大数据·flink·apache
代立冬4 天前
927 个 PR:Apache SeaTunnel 3.0.0 正式发布!AI 时代,数据集成正在迎来新的可能
人工智能·apache
zhongben_keji5 天前
家政小程序开发全解:经营模式、品类矩阵、派单约束与信用核验
线性代数·矩阵·apache
weixin_177297220696 天前
二手旧物回收小程序先要解决的不是下单,是“上门之后价格变了怎么办“
小程序·apache
努力变的更好6 天前
H5与小程序之间的回调
前端·小程序·apache
十碗饭吃不饱8 天前
Apache POI 踩坑:setFontFamily 二次设置字体不生效、样式残留问题深度解析
java·word·apache
心随_风动9 天前
Ubuntu系统安装Apache服务教程
linux·ubuntu·apache
ly768910 天前
Kafka 消费者重试与死信:Spring for Apache Kafka 的边界设计
spring·kafka·apache·并发消费·消费者重试·死信主题·位移提交
HoneyMoose11 天前
Ubuntu Apache 配置多站点提示 SSL 错误
ubuntu·apache·ssl
骑着蜗牛撵大象32711 天前
一套引擎撑起树表双模型:Apache IoTDB 2.0 与 TsFile 的选型答卷
apache·时序数据库·iotdb·tsfile·树模型·表模型