6.ApachePOI

Apache POI

Apache POI

介绍:

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

应用场景:

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

maven坐标:

<!-- 支持xls文件 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.0</version>
</dependency>
<!-- 支持xlsx文件 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.0</version>
</dependency>

Apache POI常用方法:

XSSFWorkbook类方法:
  • new XSSFWorkbook():使用无参构造方法,在内存中创建一个Excel文件;返回值为XSSFWorkbook对象;
  • new XSSFWorkbook(参数):
    • 有参构造方法,通过输入流读取磁盘中已存在的Excel文件
    • 参数为字节输入流,即FileInputStream对象;如:new FileInputStream(new File(”文件所在地址“));
    • 返回值为XSSFWorkbook对象;
  • createSheelt():普通方法,在Excel文件中创建一个Sheet页;返回XSSFSheet对象;
  • getSheetAt(参数):
    • 普通方法,读取Excel文件中的Sheet页;
    • 参数为整数,为索引,从0开始,即0为第一个Sheet页;
    • 返回值为XSSFSheet对象;
  • write(参数):
    • 普通方法:通过输出流将内存中的Excel文件写入到磁盘中;
    • 参数为字节输出流,即FileOutputStream对象;如:new FileOutputStream(new File(”输出地址“));
  • close():普通方法,用于关闭资源;
XSSFSheet类方法:
  • createRow(参数):
    • 普通方法,用于在Sheet页中创建行对象;
    • 参数是整数类型,为rownum编号,即第几行,编号从0开始;如:0为第一行;
    • 返回值为XSSFRow对象;
  • getLastRowNum():普通方法,获取该Sheet页中最后一行的行号,行号从0开始;返回值是int类型;
  • .getRow(参数):
    • 普通方法,获取该Sheet页中的对应行;
    • 参数为整数类型,为rownum编号,即获取第几行,编号从0开始;如:0为第一行;
    • 返回值为XSSFRow对象;
XSSFRow类方法:
  • createCell(参数):
    • 普通方法,用于在该行创建单元格;
    • 参数是整数类型,为第几个单元格,从0开始,即0为第一个单元格;
    • 返回值为XSSFCell对象;
  • getCell(参数):
    • 普通方法,用于获取该行对应的单元格;
    • 参数为整数类型,为获取第几个单元格,从0开始,即0为第一个单元格;
    • 返回值为XSSFCell对象;
XSSFCell类方法:
  • setCellValue(参数):
    • 普通方法,用于在该单元格写入文件内容;
    • 参数是字符串类型;
  • getStringCellVaule():普通方法,获取该单元格中的内容;

通过POI创建Excel文件并且写入文件内容例子:

// 通过POI创建Excel文件并且写入文件内容
public static void write() throws IOException{
    // 在内存中创建Excel文件
    XSSFWorkbook excel = new XSSFWorkbook();

    // 在Excel文件中创建Sheet
    XSSFSheet sheet = excel.createSheet();

    // 创建sheet页中的行
    // 第一行
    XSSFRow row = sheet.createRow(0);

    // 在第一行内创建对应单元格并设置内容
    row.createCell(0).setCellValue("班级");
    row.createCell(1).setCellValue("姓名");
    row.createCell(2).setCellValue("学号");

    // 第二行
    row = sheet.createRow(1);

    // 第二行单元格设置内容
    row.createCell(0).setCellValue("软件2202");
    row.createCell(1).setCellValue("刘锐");
    row.createCell(2).setCellValue("22120229");

    // 第三行
    row = sheet.createRow(2);

    // 第三行单元格设置内容
    row.createCell(0).setCellValue("软件2202");
    row.createCell(1).setCellValue("蔡佳佳");
    row.createCell(2).setCellValue("22120201");

    // 创建输出流,使用输出流将内存中的Excel文件写进磁盘中;
    FileOutputStream out = new FileOutputStream(new File("D:\\apply\\study\\software\\code\\test1\\文件\\info.xlsx"));
    excel.write(out);

    // 关闭资源
    out.close();
    excel.close();
}

通过POI读取Excel文件内容例子:

// 通过POI读取Excel文件内容
public static void read() throws IOException{ 
    // 使用输入流获取excel文件
    FileInputStream in = new FileInputStream(new File("D:\\apply\\study\\software\\code\\test1\\文件\\info.xlsx"));
    XSSFWorkbook excel = new XSSFWorkbook(in);

    // 获取excel文件Sheet页
    XSSFSheet sheet = excel.getSheetAt(0);

    // 获取Sheet页中的有数据的最后一行
    int lastRowNum = sheet.getLastRowNum();
    // 使用循环获取sheet页中的数据
    for(int i=0;i<=lastRowNum;i++){
        // 获取行
        XSSFRow row = sheet.getRow(i);

        // 获取该行单元格数据
        String className = row.getCell(0).getStringCellValue();
        String name = row.getCell(1).getStringCellValue();
        String studentId = row.getCell(2).getStringCellValue();

        // 打印数据
        System.out.println(className + " " + name + " " + studentId);
    }

    // 关闭资源
    in.close();
    excel.close();

}
posted @ 2024-06-01 11:41  回家太晚太悲催  阅读(73)  评论(0)    收藏  举报