介绍

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坐标
	    <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文件中
/**
     * 创建并写入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表格如下:
在这里插入图片描述
3. 读取Excel文件中的数据

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

代码运行后控制台的输出结果如下:
在这里插入图片描述

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部