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下配置Https证书详细过程
Apr 01 Servers
利用Nginx代理如何解决前端跨域问题详析
Apr 02 Servers
uwsgi+nginx代理Django无法访问静态资源的解决
May 10 Servers
CentOS下安装Jenkins的完整步骤
Apr 07 Servers
Mac电脑OS系统下安装Nginx的详细教程
Apr 14 Servers
Tomcat执行startup.bat出现闪退的原因及解决办法
Apr 20 Servers
Windows server 2012 配置Telnet以及用法详解
Apr 28 Servers
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
Apr 29 Servers
Nginx利用Logrotate实现日志分割
May 20 Servers
解决Git推送错误non-fast-forward的方法
Jun 25 Servers
Windows Server 2008配置防火墙策略详解
Jun 28 Servers
Nginx配置使用详解
Jul 07 Servers
nginx实现动静分离的方法示例
Nginx内网单机反向代理的实现
Nov 07 #Servers
zabbix自定义监控nginx状态实现过程
总结高并发下Nginx性能如何优化
Rhit高效可视化Nginx日志查看工具
Nginx+Tomcat负载均衡集群的实现示例
Nginx反向代理学习实例教程
You might like
PHP二维数组的去重问题解析
2011/07/17 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
php中session与cookie的比较
2015/01/27 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
Ext grid 添加右击菜单
2009/11/26 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python中的多线程实例教程
2014/08/27 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
Python二维码生成识别实例详解
2019/07/16 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
wxpython绘制圆角窗体
2019/11/18 Python
python cookie反爬处理的实现
2020/11/01 Python
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
项目合作意向书
2015/05/08 职场文书