java实现从excel中提取某行_Java读取excel表格(原理+实现)
一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢
什么是Apache POI?
Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。
Apache POI
Apache POI是Apache软件基金会提供的100%开源库。大多数中小规模的应用程序开发主要依赖于Apache POI(HSSF+ XSSF)。它支持Excel 库的所有基本功能; 然而,呈现和文本提取是它的主要特点。
工作簿
这是创建或维护Excel工作簿的所有类的超接口。它属于org.apache.poi.ss.usermodel包。是实现此接口的两个类,如下所示:
HSSFWorkbook : 这个类有读取和.xls 格式和写入Microsoft Excel文件的方法。它与微软Office97-2003版本兼容。
XSSFWorkbook : 这个类有读写Microsoft Excel和OpenOffice的XML文件的格式.xls或.xlsx的方法。它与MS-Office版本2007或更高版本兼容。
HSSFWorkbook
它是在org.apache.poi.hssf.usermodel包的高层次的类。它实现了Workbook 接口,用于Excel文件中的.xls格式。下面列出的是一些本类下的方法和构造函数。
类的构造函数
S.No.
构造函数和说明
1
HSSFWorkbook()
从头开始创建一个新的HSSFWorkbook对象时。
2
HSSFWorkbook(DirectoryNode directory, boolean preserveNodes)
创建一个特定的目录中一个新的HSSFWworkbook对象。
3
HSSFWorkbook(DirectoryNode directory, POIFSFileSystem fs, boolean preserveNodes)
给定一个POIFSFileSystem对象和特定的目录中,它创建了一个SSFWorkbook对象读取指定的工作簿。
4
HSSFWorkbook(java.io.InputStream s)
创建使用输入流中的新HSSFWorkbook对象时。
5
HSSFWorkbook(java.io.InputStream s, boolean preserveNodes)
构建在输入流的POI文件系统。
6
HSSFWorkbook(POIFSFileSystem fs)
使用POIFSFileSystem对象构造的新HSSFWorkbook对象时。
7
HSSFWorkbook(POIFSFileSystem fs, boolean preserveNodes)
给定一个POIFSFileSystem对象时,它会创建一个新的HSSFWorkbook对象时读取指定的工作簿。
这些构造内的常用参数:
directory : 这是从POI文件系统处理的目录。
fs :它是包含簿流该POI的文件系统。
preservenodes : 这是决定是否保留其他节点像宏的可选参数。它消耗大量的内存,因为它存储在内存中的所有POIFileSystem(如果设置)。
注意:HSSFWorkbook类包含了许多方法;然而,它们仅与XLS格式兼容。在本教程中,重点是在Excel文件格式的最新版本。因此,HSSFWorkbook类的方法,这里没有列出。如果需要这些类的方法,那么请参照POI-HSSFWorkbook类API在 https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html.
XSSFWorkbook
它是用于表示高和低层次Excel文件格式的类。它属于org.apache.xssf.usemodel包,并实现Workbook接口。下面列出的是这个类的方法和构造函数。
类的构造函数
S.No.
构造函数和说明
1
XSSFWorkbook()
从头开始创建一个新的XSSFworkbook对象。
2
XSSFWorkbook(java.io.File file)
构造从给定文件中的XSSFWorkbook对象。
3
XSSFWorkbook(java.io.InputStream is)
构造一个XSSFWorkbook对象,通过缓冲整个输入流到内存中,然后为它打开一个OPCPackage对象。
4
XSSFWorkbook(java.lang.String path)
构建一个给定文件的完整路径的XSSFWorkbook对象。
Sheet
Sheet是在org.apache.poi.ss.usermodel包的接口,它是创建具有特定名称的高或低级别的电子表格的所有类的超接口。电子表格的最常见的类型是工作表,它被表示为单元的网格。
HSSFSheet
这是在org.apache.poi.hssf.usermodel包的类。它可以创建Excel电子表格,它允许在sheet 方式和表数据格式。
类的构造函数
S.No.
构造函数及描述
1
HSSFSheet(HSSFWorkbook workbook)
创建新HSSFSheet通过调用HSSFWorkbook从头开始创建一个表。
2
HSSFSheet(HSSFWorkbook workbook, InternalSheet sheet)
创建HSSFSheet表示给定表对象。
XSSFSheet
这是代表了Excel电子表格的高级别代表的一类。这在org.apache.poi.hssf.usermodel包下。
类的构造函数
S.No.
构造函数及描述
1
XSSFSheet()
创造了新的XSSFSheet- 调用XSSFWorkbook从头开始创建一个表。
2
XSSFSheet(PackagePart part, PackageRelationship rel)
创建XSSFSheet表示给定包的一部分和关系。
类方法
S.No.
方法和描述
1
addMergedRegion(CellRangeAddress region)
添加单元的合并区域(因此这些单元格合并形成一个)。
2
autoSizeColumn(int column)
调整列宽,以适应的内容。
3
iterator()
此方法是用于rowIterator()的别名,以允许foreach循环
4
addHyperlink(XSSFHyperlink hyperlink)
注册超链接的集合中的超链接此工作表格上
对于此类的其余的方法,请参阅完整的API在:
https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html.
行
这是在org.apache.poi.ss.usermodel包的接口。它是用于一排的电子表格的高层表示。它是代表了POI库的行所有类的超接口。
XSSFRow
这是在org.apache.poi.xssf.usermodel包的类。它实现了Row接口,因此它可以在电子表格中创建行。下面列出的是这个类在方法和构造函数。
类方法
S.No.
描述
1
createCell(int columnIndex)
创建新单元行并返回。
2
setHeight(short height)
设置短单位的高度。
对于此类的其余的方法,参考如下链接:
https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html
单元格
这是在org.apache.poi.ss.usermodel包的接口。它是代表了单元在电子表格中的行中的所有类的超接口。
单元格可以使用各种属性,例如空白,数字,日期,错误等单元格被添加到一个行之前应具有(基于0)自己的编号。
XSSFCell
这是在 org.apache.poi.xssf.usermodel 包的类。它实现了单元格界面。它是单元在电子表格中的行的一个高层次的表示。
现在我用Java实现读取excel表格
代码实现
public static void excel() throws Exception {
//用流的方式先读取到你想要的excel的文件
FileInputStream fis=new FileInputStream(new File(System.getProperty("user.dir")+"/src/excel.xls"));
//解析excel
POIFSFileSystem pSystem=new POIFSFileSystem(fis);
//获取整个excel
HSSFWorkbook hb=new HSSFWorkbook(pSystem);
System.out.println(hb.getNumCellStyles());
//获取第一个表单sheet
HSSFSheet sheet=hb.getSheetAt(0);
//获取第一行
int firstrow= sheet.getFirstRowNum();
//获取最后一行
int lastrow= sheet.getLastRowNum();
//循环行数依次获取列数
for (int i = firstrow; i < lastrow+1; i++) {
//获取哪一行i
Row row=sheet.getRow(i);
if (row!=null) {
//获取这一行的第一列
int firstcell= row.getFirstCellNum();
//获取这一行的最后一列
int lastcell= row.getLastCellNum();
//创建一个集合,用处将每一行的每一列数据都存入集合中
Listlist=new ArrayList<>();
for (int j = firstcell; j 0) {
user.setUsername(list.get(1));
user.setPassword(list.get(2));
}
BaseDAO dao=new BaseDAO();
dao.save(user);
System.out.println();
}
}
fis.close();
}
放下你那抠脚的手,和我一起敲代码吧!
java实现从excel中提取某行_Java读取excel表格(原理+实现)相关推荐
- java实现从excel中提取某行_Java实现操作excel表格
最近老师布置了个任务,用Java对excel后缀名为xlsx的文件进行简单的增,删,改,查操作:虽说是个简单的程序,可作为刚接触的我来说还是有些磕磕碰碰.不过好在还是完成了,进行一个简单的总结. 首先 ...
- java excel中重复数据 事务处理_Java导出excel时合并同一列中相同内容的行思路详解...
一.有时候导出Excel时需要按类别导出,一大类下好几个小类,小类下又有好几个小小类,就像下图: 要实现这个也不难, 思路如下:按照大类来循环,如上就是按照张江校区.徐汇校区.临港校区三个大类循环,然 ...
- EXCEL中提取某行最后一个有效单元格数据
用户的需求总是多种多样的,有的如同下图:大家可以看下图,只是举例,不一定合理.每个人所属的部门的级别不同,有的人属于公司之下,有的属于team之下,而大家可以看到这个表里面有很多空白单元格,看上去不是 ...
- java excel 删除行_使用Apache POI在Excel中删除多行
我有一张包含75行表格的Excel表格 . 在第76行我有各列的总功能 =SUM(A1:A75) 和 =SUM(B1:B75) 在第77到第92位的行我有一个Excel图表这需要A1:A75和B1:为 ...
- excel中提取月份_在Excel中自动添加月份表
excel中提取月份 Set up a Master sheet in your workbook, and add month sheets automatically, based on that ...
- 从Excel中提取数据
从事android客户端开发的小伙伴们肯定都知道打点的痛苦,尤其是把点位从excel复制到java文件中,还要一个一个的修改,繁琐之极,所以想到了从excel中提取数据. 1.开发用的是android ...
- matlab提取数据的一部分,matlab处理excel数据【怎么用MATLAB从excel中提取部分数据】...
已经把excel的一列导入到matlab的工作区,怎么计算这一列数的均值.标准差.最小值.最大值以及中位数? 把这个EXCEL放到matlab目录下的work里,假设名为1.xls,然后在matlab ...
- 如何在excel中提取教师 教不同多个班级的综合平均分 合格率
在Excel中提取教师教多个班级的综合平均分和合格率,你可以这样做: 建立一个数据表,表格的第一列是教师的姓名,第二列是班级名称,其余列是学生的成绩. 使用Excel的IF语句,对学生成绩进行判断,确 ...
- 怎样让表格的行高一样_excel表格多数据如何设置行高-Excel EXCEL中如何把行高平均成一样高...
excel表格如何设置行高 1.本次操作的软件为Excel电格,软件版本为office和学生版2016. 2.首先打开Excel电子表格,根据问题描述,我们格中输入用于演示设置表格最合适的行高列宽的数 ...
最新文章
- 基于网络监听方式的电子邮件实现基础
- Linux系统16进制形式查看二进制文件
- Http的请求协议请求行介绍
- android软件更新模块实现的技术和方法,Android APK签名原理及方法
- cmake中添加 -g编译选项
- Surface Computing
- 前嗅ForeSpider教程:如何创建新任务
- Android开发之Socket通信的方法
- 光纤测试时不得不用的福禄克CFP光纤测试仪
- WSUS服务器的建立以及客户端发布
- Css3之基础-5 Css 背景、渐变属性
- 理论基础 —— 线性表
- php限制ip访问次数 并发_nginx限制ip请求次数 以及并发次数
- 华为与万达签订5G战略合作协议 推动5G商业场景应用
- Java引用常量得好处_JAVA常量池的作用
- qt之解决qtableview加载百万行数据卡顿问题
- matlab求解pde,matlab求解pde问题
- java3d翻转纪念相册_抖音上很火的3D立体动态相册实现代码!
- 【报告分享】代餐行业营销洞察报告-丁香医生(附下载)
- 什么是模型?开发软件为什么要建模?