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快速入门教程
Mar 31 Servers
Nginx搭建rtmp直播服务器实现代码
Mar 31 Servers
win10安装配置nginx的过程
Mar 31 Servers
提升Nginx性能的一些建议
Mar 31 Servers
nginx反向代理配置去除前缀案例教程
Jul 26 Servers
Nginx防盗链与服务优化配置的全过程
Jan 18 Servers
使用 Docker Compose 构建复杂的多容器App
Apr 30 Servers
Apache SeaTunnel实现 非CDC数据抽取
May 20 Servers
Windows Server 2022 超融合部署(图文教程)
Jun 25 Servers
搭建zabbix监控以及邮件报警的超级详细教学
Jul 15 Servers
Windows Server 2012 R2服务器安装与配置的完整步骤
Jul 15 Servers
nginx实现动静分离的方法示例
Nginx内网单机反向代理的实现
Nov 07 #Servers
zabbix自定义监控nginx状态实现过程
总结高并发下Nginx性能如何优化
Rhit高效可视化Nginx日志查看工具
Nginx+Tomcat负载均衡集群的实现示例
Nginx反向代理学习实例教程
You might like
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php导出excel格式数据问题
2014/03/11 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
php获取远程文件大小
2015/10/20 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
jquery 3D球状导航的文章分类
2010/07/06 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
基于Python实现用户管理系统
2019/02/26 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
超实用的 30 段 Python 案例
2019/10/10 Python
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
上海奥佳笔试题面试题
2016/11/16 面试题
JAVA中运算符的分类及举例
2015/09/12 面试题
网吧最新创业计划书范文
2014/03/27 职场文书
2015社区爱国卫生工作总结
2015/04/21 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
python游戏开发Pygame框架
2022/04/22 Python