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处理http请求实现过程解析
Mar 31 Servers
查看nginx配置文件路径和资源文件路径的方法
Mar 31 Servers
Nginx本地目录映射实现代码实例
Mar 31 Servers
提升Nginx性能的一些建议
Mar 31 Servers
利用Nginx代理如何解决前端跨域问题详析
Apr 02 Servers
使用nginx配置访问wgcloud的方法
Jun 26 Servers
nginx实现动静分离的方法示例
Nov 07 Servers
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
Feb 12 Servers
Nginx实现会话保持的两种方式
Mar 18 Servers
Nginx工作模式及代理配置的使用细节
Mar 21 Servers
nginx 配置缓存
May 11 Servers
windows server 2012安装FTP并配置被动模式指定开放端口
Jun 10 Servers
nginx实现动静分离的方法示例
Nginx内网单机反向代理的实现
Nov 07 #Servers
zabbix自定义监控nginx状态实现过程
总结高并发下Nginx性能如何优化
Rhit高效可视化Nginx日志查看工具
Nginx+Tomcat负载均衡集群的实现示例
Nginx反向代理学习实例教程
You might like
桌面中心(二)数据库写入
2006/10/09 PHP
PHP脚本的10个技巧(5)
2006/10/09 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
学习ExtJS table布局
2009/10/08 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
JavaScript模块详解
2017/12/18 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
python将图片文件转换成base64编码的方法
2015/03/14 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
个人社会实践自我鉴定
2014/03/24 职场文书
大学生交通专业求职信
2014/09/01 职场文书
介绍信的格式
2015/01/30 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书