博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Excel处理:Apache POI
阅读量:2056 次
发布时间:2019-04-28

本文共 2742 字,大约阅读时间需要 9 分钟。

1. Apache POI

1.1 POI介绍

Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft

Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。
jxl:专门操作Excel
maven坐标:

org.apache.poi
poi
3.14
org.apache.poi
poi-ooxml
3.14

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格式档案的功能

1.2 入门案例

1.2.1 从Excel文件读取数据

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

//加载指定文件,创建一份Excel对象(工作簿)XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("C:\\Users\\61443\\Desktop\\poi.xlsx")));//读取Excel文件中第一个Sheet标签页XSSFSheet sheet = excel.getSheetAt(0);//遍历Sheet标签页,获得每一行数据for (Row row : sheet) {
//遍历行,获得每个单元格对象 for (Cell cell : row) {
System.out.println(cell.getStringCellValue()); }}excel.close();

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

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

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

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

//加载指定文件,创建一份Excel对象(工作簿)XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("C:\\Users\\61443\\Desktop\\poi.xlsx")));//读取Excel文件中第一个Sheet标签页XSSFSheet sheet = excel.getSheetAt(0);//获得当前工作表中最后一个行号,需要注意:行号从0开始int lastRowNum = sheet.getLastRowNum();//lastRowNum的计数是从0开始的,所有需要等于号,才可以遍历完毕,即俩行lastRowNum为1for (int i = 0; i <= lastRowNum; i++) {
//根据行号获取每一行 XSSFRow row = sheet.getRow(i); //获取当前行最后一个单元格索引 short lastCellNum = row.getLastCellNum(); //getCell()索引是从0开始的,而lastCellNum的计数是从1开始的,不需要等于号,就可以遍历完毕,即俩格lastCellNum为2 for (int j = 0; j < lastCellNum; j++) {
//根据单元格索引获取单元格对象 XSSFCell cell = row.getCell(j); System.out.println(cell.getStringCellValue()); }}excel.close();

1.2.2 向Excel文件写入数据

使用POI可以在内存中创建一个Excel文件并将数据写入到这个文件,最后通过输出流将内存中的Excel

文件下载到磁盘

//在内存中创建一个Excel文件XSSFWorkbook workbook = new XSSFWorkbook();//创建工作表,指定工作表名称XSSFSheet sheet = workbook.createSheet("XXXX");//创建行,0表示第一行XSSFRow row = sheet.createRow(0);//创建单元格,0表示第一个单元格row.createCell(0).setCellValue("编号");row.createCell(1).setCellValue("名称");row.createCell(2).setCellValue("年龄");XSSFRow row1 = sheet.createRow(1);row1.createCell(0).setCellValue("1");row1.createCell(1).setCellValue("小明");row1.createCell(2).setCellValue("10");XSSFRow row2 = sheet.createRow(2);row2.createCell(0).setCellValue("2");row2.createCell(1).setCellValue("小王");row2.createCell(2).setCellValue("20");//通过输出流将workbook对象下载到磁盘FileOutputStream out = new FileOutputStream("D:\\itcast.xlsx");workbook.write(out);out.flush();out.close();workbook.close();

转载地址:http://cnilf.baihongyu.com/

你可能感兴趣的文章
教你玩转微服务的装逼指南!
查看>>
Envoy 中文指南系列:Sidecar 模式
查看>>
面试官邪魅一笑:你猜一个 TCP 重置报文的序列号是多少?
查看>>
Envoy 中文指南系列: 安装
查看>>
最华丽的 Kubernetes 桌面客户端:Lens
查看>>
太赞了,这个神器竟然能分分钟将多个 kubeconfig 合并成一个!
查看>>
如何解决容器中 nginx worker process 自动设置的问题
查看>>
ethtool 原理介绍和解决网卡丢包排查思路
查看>>
HPE 推出容器平台 Ezmeral,向 VMware 与 Red Hat 下战书
查看>>
使用 Prometheus-Operator 监控 Calico
查看>>
如果你不习惯新版的 Github 的 UI 界面,可以试试这款插件
查看>>
容器化囧途——没上容器时好好的?
查看>>
linux内核网络参数tcp_tw_recycle 和 tcp_tw_reuse 你搞清楚了吗?
查看>>
40核CPU+80G内存的云资源终终终终终于免费了!
查看>>
Drone开源持续集成工具——Pipeline篇
查看>>
Kubernetes 源码剖析之 WorkQueue 队列 | 文末送书
查看>>
根据 PID 获取容器所在的 Pod 名称
查看>>
JAVA 面试很难吗?Oracle 工程师教你轻松搞定BAT!
查看>>
弹窗!到底谁是幕后黑手?
查看>>
免费分享一个最完美的英语学习素材 Englishpod
查看>>