当前位置: 首页 > article >正文

Apache POI(处理Miscrosoft Office各种文件格式)

文章目录

  • 一、Apache POI介绍
  • 二、应用场景
  • 三、使用步骤
    • 1.导入maven坐标
    • 2.写入代码讲解
    • 3.读取代码讲解
  • 总结


一、Apache POI介绍

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

一般情况下,POI 都是用于操作 Excel 文件。
在这里插入图片描述

二、应用场景

Apache POI 的应用场景:

  • 银行网银系统导出交易明细
    在这里插入图片描述

  • 各种业务系统导出Excel报表
    在这里插入图片描述

  • 批量导入业务数据
    在这里插入图片描述

三、使用步骤

1.导入maven坐标

代码如下(示例):

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.16</version>
</dependency>
<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.16</version>
</dependency>

2.写入代码讲解

在内存中创建一个Excel文件:

XSSFWorkbook excel=new XSSFWorkbook();

在Excel文件中创建一个Sheet页:

XSSFSheet sheet=excel.createSheet("info");

在Sheet中创建行对象,rownum编号从0开始:

XSSFRow row=sheet.createRow(1);

创建单元格并且写入文件内容:

row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("城市");

//创建一个新行:

 row=sheet.createRow(2);
 row.createCell(1).setCellValue("张三");
 row.createCell(2).setCellValue("北京");

通过输出流将内存中的Excel文件写入到磁盘:

FileOutputStream out=new FileOutputStream(new File("D:\\info.xlsx"));
excel.write(out);

关闭资源:

out.close();
excel.close();

全部代码如下:

package com.sky.test;

import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;

public class POITest {

    /**
     * 通过POI创建Excel文件并且写入文件内容
     */
    public static void write() throws Exception{
        //在内存中创建一个Excel文件
        XSSFWorkbook excel=new XSSFWorkbook();
        //在Excel文件中创建一个Sheet页
        XSSFSheet sheet=excel.createSheet("info");
        //在Sheet中创建行对象,rownum编号从0开始
        XSSFRow row=sheet.createRow(1);
        //创建单元格并且写入文件内容
        row.createCell(1).setCellValue("姓名");
        row.createCell(2).setCellValue("城市");

        //创建一个新行
        row=sheet.createRow(2);
        row.createCell(1).setCellValue("张三");
        row.createCell(2).setCellValue("北京");

        //创建一个新行
        row=sheet.createRow(3);
        row.createCell(1).setCellValue("李四");
        row.createCell(2).setCellValue("南京");

        //通过输出流将内存中的Excel文件写入到磁盘
        FileOutputStream out=new FileOutputStream(new File("D:\\info.xlsx"));
        excel.write(out);

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

    }

    public static void main(String[] args) throws Exception{
        write();
    }

}

效果如下:
在这里插入图片描述

3.读取代码讲解

创建文件读取流:

 InputStream in =new FileInputStream(("D:\\info.xlsx"));

读取磁盘上已经存在的Excel文件:

XSSFWorkbook excel=new XSSFWorkbook(in);

读取Excel文件中的第一个Sheet页:

XSSFSheet sheet=excel.getSheetAt(0);

获取Sheet中最后一行的行号:

int lastRowNum = sheet.getLastRowNum();

输出:

for(int i = 1; i <= lastRowNum ; i++){
            //获得某一行
            XSSFRow row = sheet.getRow(i);
            //获得单元格对象
            String cellValue1 = row.getCell(1).getStringCellValue();
            String cellValue2 = row.getCell(2).getStringCellValue();
            System.out.println(cellValue1+"  "+cellValue2);

        }

关闭资源:

in.close();
excel.close();

完整代码如下:

package com.sky.test;

import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

public class POITest {

    /**
     * 通过POI创建Excel文件并且写入文件内容
     */
    public static void write() throws Exception{
        //在内存中创建一个Excel文件
        XSSFWorkbook excel=new XSSFWorkbook();
        //在Excel文件中创建一个Sheet页
        XSSFSheet sheet=excel.createSheet("info");
        //在Sheet中创建行对象,rownum编号从0开始
        XSSFRow row=sheet.createRow(1);
        //创建单元格并且写入文件内容
        row.createCell(1).setCellValue("姓名");
        row.createCell(2).setCellValue("城市");

        //创建一个新行
        row=sheet.createRow(2);
        row.createCell(1).setCellValue("张三");
        row.createCell(2).setCellValue("北京");

        //创建一个新行
        row=sheet.createRow(3);
        row.createCell(1).setCellValue("李四");
        row.createCell(2).setCellValue("南京");

        //通过输出流将内存中的Excel文件写入到磁盘
        FileOutputStream out=new FileOutputStream(new File("D:\\info.xlsx"));
        excel.write(out);

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

    }

    /**
     * 通过POI读取Excel文件中的内容
     * @throws Exception
     */
    public static void read() throws  Exception{
        //创建文件读取流
        InputStream in =new FileInputStream(("D:\\info.xlsx"));

        //读取磁盘上已经存在的Excel文件
        XSSFWorkbook excel=new XSSFWorkbook(in);
        //读取Excel文件中的第一个Sheet页
        XSSFSheet sheet=excel.getSheetAt(0);
        //获取Sheet中最后一行的行号
        int lastRowNum = sheet.getLastRowNum();

        for(int i = 1; i <= lastRowNum ; i++){
            //获得某一行
            XSSFRow row = sheet.getRow(i);
            //获得单元格对象
            String cellValue1 = row.getCell(1).getStringCellValue();
            String cellValue2 = row.getCell(2).getStringCellValue();
            System.out.println(cellValue1+"  "+cellValue2);

        }

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


    public static void main(String[] args) throws Exception{
        //write();
        read();
    }

}

总结

以上就是Apache POI(处理Miscrosoft Office各种文件格式)的相关知识点,希望对你有所帮助。
积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!


http://www.kler.cn/a/148506.html

相关文章:

  • css:盒子模型
  • Vue 项目打包后环境变量丢失问题(清除缓存),区分.env和.env.*文件
  • 24.11.13 Javascript3
  • C/C++精品项目之图床共享云存储(3):网络缓冲区类和main
  • libcurl.net入门使用
  • 【pytorch】常用强化学习算法实现(持续更新)
  • anyRTC 融合音视频能力底座:助力企业数字化转型
  • 京东数据分析(京东大数据采集):2023年线上珍珠市场销售数据采集
  • 2023SICTF-web-白猫-[签到]Include
  • HuggingFace学习笔记--Tokenizer的使用
  • 【UGUI】制作用户注册UI界面
  • antd vue a-select 下拉框位置偏移
  • C语言-内存函数详解
  • qss文件里面指定是哪一个控件的样式
  • 电子学会C/C++编程等级考试2022年06月(三级)真题解析
  • Vue 定义只读数据 readonly 与 shallowReadonly
  • 软工2021上下午第六题(组合模式)
  • 1.Spring源码解析-ClassPathXmlApplicationContext
  • Oracle
  • 线性表之队列
  • 【Qt绘制仪表盘】
  • CentOS7.9虚拟机EDA环境,支持模拟集成电路、数字集成电路、数模混合设计全流程,包含工艺库
  • LeetCode(33)最小覆盖子串【滑动窗口】【困难】
  • java BASE64Encoder BASE64Decoder 废弃
  • 大数据机房迁移该按照什么步骤进行 |数据中心
  • 【Java学习笔记】73 - 正则表达式