Apache POI的基本使用详解


Posted in Servers onNovember 07, 2021

基本介绍

POI

  • pache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,
  • 使用最多的就是使用POI操作Excel文件。
  • 它还能操作word等这些其他形式的文档

jxl:专门操作Excel,专门用来操作Excel的

使用POI,需要导入maven坐标

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

POI结构:针对不同的文档形式来操作的时候会提供相应的一些类

HSSF - 提供读写Microsoft Excel XLS格式档案的功能
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能
HWPF - 提供读写Microsoft Word DOC格式档案的功能
HSLF - 提供读写Microsoft PowerPoint格式档案的功能
HDGF - 提供读Microsoft Visio格式档案的功能
HPBF - 提供读Microsoft Publisher格式档案的功能
HSMF - 提供读Microsoft Outlook格式档案的功能

入门测试(从Excel文件读取数据)

使用POI可以从一个已经存在的Excel文件中读取数据

第一步:导入maven坐标

下面是第二步

第二步:创建Excel文件

Apache POI的基本使用详解

第三步:写测试代码

package com.yy.test;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;

/**
 * @author Marston
 * @date 2021/10/29
 */
public class POITest {
    @Test
    public void test() throws Exception {
        //传入一个输入流,加载指定文件,创建一个Excel对象(工作簿)
        XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("E:\\testNomal\\poi.xlsx")));
        //读取Excel文件中的第一个Sheet标签页
        XSSFSheet sheet = excel.getSheetAt(0);
        //一个sheet页里面有很多行,遍历这个sheet标签页,获取每一行数据
        for (Row row : sheet) {
            //遍历行,获得每个单元格对象
            for (Cell cell : row) {
                //cell代表单元格对象
                System.out.println(cell.getStringCellValue());//getStringCellValue第二列因为是数值,不能转为String类型的所以报错
                //只要将Excel表格里面的第二列的内容改为string类型的就可以了
            }
        }
        //关闭Excel文件
        excel.close();
    }
}

运行结果:

Apache POI的基本使用详解

因为是入门案例,我这里就要类型改变为下面的,将Excel文件里面的内容修改后:

Apache POI的基本使用详解
Apache POI的基本使用详解

代码说明及扩展

通过上面的入门案例可以看到,POI操作Excel表格封装了几个核心对象:

XSSFWorkbook:工作簿
XSSFSheet:工作表
Row:行
Cell:单元格

上面案例是通过遍历工作表获得行,遍历行获得单元格,最终获取单元格中的值。

还有一种方式就是获取工作表最后一个行号,从而根据行号获得行对象,通过行获取最后一个单元格索引,从而根据单元格索引获取每行的一个单元格对象,代码如下:

package com.yy.test;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;

/**
 * @author Marston
 * @date 2021/10/29
 */
public class POITest {
    @Test
    public void test2() throws Exception {
        //传入一个输入流,加载指定文件,创建一个Excel对象(工作簿)
        XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("E:\\testNomal\\poi.xlsx")));
        //读取Excel文件中的第一个Sheet标签页
        XSSFSheet sheet = excel.getSheetAt(0);
        //获取当前工作表最后一行的行号,行号从0开始
        int lastRowNum = sheet.getLastRowNum();
        System.out.println("lastRowNum:"+lastRowNum);
        for(int i=0;i<=lastRowNum;i++){
            //根据行号获取每一行
            XSSFRow row = sheet.getRow(i);
            //获取当前行最后一个单元格索引
            short lastCellNum = row.getLastCellNum();
            System.out.println("lastCellNum:"+lastCellNum);
            for(short j=0;j<lastCellNum;j++){
                //根据单元格索引获取单元格内容
                String value = row.getCell(j).getStringCellValue();
                System.out.println(value);
            }
        }
        //关闭Excel文件
        excel.close();
    }
}

Apache POI的基本使用详解

入门测试(向Excel文件写入数据)

测试代码:

//使用POI向Excel文件写入数据,并且通过输出流将创建的Excel文件保存到本地磁盘
    //@Test
    public void test3() throws Exception{
        //在内存中创建一个Excel文件(工作簿)
        XSSFWorkbook excel = new XSSFWorkbook();
        //创建一个工作表对象,名字叫做:POI写入测试
        XSSFSheet sheet = excel.createSheet("POI写入测试");
        //在工作表中创建行对象,在第一行创建
        XSSFRow title = sheet.createRow(0);
        //在行中创建单元格对象
        title.createCell(0).setCellValue("姓名");//第一列内容
        title.createCell(1).setCellValue("地址");
        title.createCell(2).setCellValue("年龄");

		//在第二行创建
        XSSFRow dataRow = sheet.createRow(1);
        dataRow.createCell(0).setCellValue("小明");
        dataRow.createCell(1).setCellValue("北京");
        dataRow.createCell(2).setCellValue("20");

        //创建一个输出流,通过输出流将内存中的Excel文件写到磁盘
        FileOutputStream out = new FileOutputStream(new File("e:\\hello.xlsx"));
        excel.write(out);//写入
        out.flush();//刷新
        excel.close();
    }

Apache POI的基本使用详解

到此这篇关于Apache POI的基本使用的文章就介绍到这了,更多相关Apache POI使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
Mar 31 Servers
nginx搭建图片服务器的过程详解(root和alias的区别)
Mar 31 Servers
Nginx本地目录映射实现代码实例
Mar 31 Servers
Nginx配置https原理及实现过程详解
Mar 31 Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 Servers
使用Docker容器部署rocketmq单机的全过程
Apr 03 Servers
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
Apr 07 Servers
在Docker容器中部署SQL Server
Apr 11 Servers
CentOS安装Nginx并部署vue
Apr 12 Servers
如何通过cmd 连接阿里云服务器
Apr 18 Servers
鲲鹏 CentOS 7 安装Python3.7
May 11 Servers
SpringBoot前端后端分离之Nginx服务器下载安装过程
Aug 14 Servers
nginx实现动静分离的方法示例
Nginx内网单机反向代理的实现
Nov 07 #Servers
zabbix自定义监控nginx状态实现过程
总结高并发下Nginx性能如何优化
Rhit高效可视化Nginx日志查看工具
Nginx+Tomcat负载均衡集群的实现示例
Nginx反向代理学习实例教程
You might like
PHP个人网站架设连环讲(四)
2006/10/09 PHP
php图片加中文水印实现代码分享
2012/10/31 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
Python中functools模块函数解析
2017/03/12 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
python获取当前目录路径和上级路径的实例
2018/04/26 Python
python机器学习实现决策树
2019/11/11 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
小学生红领巾广播稿
2014/01/21 职场文书
农业开发项目建议书
2014/05/16 职场文书
停电放假通知
2015/04/14 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
个人向公司借款协议书
2016/03/19 职场文书
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python