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();
//创建一个集合,用处将每一行的每一列数据都存入集合中
List<String> list=new ArrayList<>();
for (int j = firstcell; j <lastcell; j++) {
//获取第j列
Cell cell=row.getCell(j);
if (cell!=null) {
System.out.print(cell+"\t");
list.add(cell.toString());
}
}
User user=new User();
if (list.size()>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 表格内容
一.添加依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ar ...
- java读取Excel表格中的数据
1.需求 用java代码读取hello.xls表格中的数据 2.hello.xls表格 3.java代码 package com.test; import java.io.File; import j ...
- Java 读取excel表格文件
注意,本文使用的Jar包为jxl.jar,只能处理97-03版本xls格式的Excel jar包 maven依赖: <dependency> <groupId>net.sour ...
- 读取Excel表格日期类型数据的时候
用POI读取Excel数据:(版本号:POI3.7) 1.读取Excel 2.Excel数据处理: Excel存储日期.时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化 1 ...
- Java操作excel表格
(1)Java读取excel表格 package com.songyan.excel; import java.io.File; import java.io.FileInputStream; imp ...
- java 读取excel(Map结构)xls
package com.sun.test; import java.io.FileInputStream;import java.io.FileNotFoundException;import jav ...
- Java读取Excel指定列的数据详细教程和注意事项
本文使用jxl.jar工具类库实现读取Excel中指定列的数据. jxl.jar是通过java操作excel表格的工具类库,是由java语言开发而成的.这套API是纯Java的,并不依赖Windows ...
- Java读取excel数据保存入库
Java开发读取excel表格数据入库保存: List<Map<String, Object>> list = null; String filePath = filePath ...
- [转载]Java读取Excel中的单元格数据
目前网上能找到的读取Excel表格中数据的两种比较好的方案:PageOffice好用开发效率高:POI免费.供大家参考,针对具体情况选择具体方案. 1. PageOffice读取excel impor ...
随机推荐
- 解决IE下CSS因 Mime 类型不匹配而被忽略的问题
写页面的时候在chrome,firefox等页面上显示正常,但是换成IE9之后就完全没有样式了,报错信息是CSS 因 Mime 类型不匹配而被忽略,下面与大家分享下这个问题的相关的回答.IE真是个奇葩 ...
- Mac上配置不同版本的JDK
Mac上JDK的版本为1.8,编译AOSP时发现需要JDK 1.7.想找一种比较容易切换JDK版本的方式,经过一番Google发现Jenv比较合适. 安装Jenv至少有三种方式: - $ git cl ...
- jquery.tagsinput的使用例子,包括模糊查询后端代码
<link rel="stylesheet" type="text/css" href="~/lib/jquery.tagsinput.jurg ...
- Spark之MapReduce原理
参考http://www.cnblogs.com/wuyudong/p/mapreduce-principle.html MapReduce 我们来拆开看: Mapping(映射)对集合里的每个目 ...
- Bash 常用快捷键(转)
在mtysql client中按HOME键和END键失效,查了也没有找到原因 使用Bash常用的快捷方式即可. http://blog.csdn.net/mingzhou/article/detail ...
- 泛型里的super和extend
<? extends T>和<? super T>应该怎么用? 网上看到一些比较难懂的回答,但是在EffectiveJava(2th Edition)遇到简单明了的解释: If ...
- 自学HTML5难 我们应该怎么做
互联网发展到今天,越来越多的技术岗位人才出现了稀缺的状态,就拿当前的HTML5来讲,基本成为了每家互联网公司不可缺少的人才.如果抓住这个机会,把HTML5搞好,那么前途不可限量,而且这门行业是越老越吃 ...
- windows下安装和redis主从配置(通过哨兵控制主从切换)
首先自己先得了解什么是redis,这里就不详做介绍什么是redis了,这篇文章主要讲的是怎么样配置 redis怎样配置主从关系和哨兵控制主从服务器的配置以及应用,就当是给自己记笔记吧! 1.下载red ...
- Python函数中如何定义参数
一.位置参数:根据函数定义时的参数位置传递参数#形参和实参的个数必须一致def fun1(): print("运行结果") print("this is fun1(),n ...
- 深入浅出多线程——ReentrantLock (二)
深入浅出多线程——ReentrantLock (一)文章中介绍了该类的基本使用,以及在源码的角度分析lock().unlock()方法.这次打算在此基础上介绍另一个极为重要的方法newConditio ...