文档章节

java读取excel文件

vapy
 vapy
发布于 2016/05/15 22:29
字数 447
阅读 30
收藏 0
点赞 2
评论 0

1>. 先用inputstream获取excel文件的io流
2>. 然后创建一个内存中的excel文件HSSFWorkbook类型对象.这个对象表示了整个excel文件.
3>. 对这个excel文件的每页做循环处理HSSFSheet
4>. 对每页中的每行做循环处理HSSFRow
5>. 对每行中的每个单元格做做处理,获取这个单元格的值HSSFCell
6>. 把这行的结果添加到一个List数组中.
7>. 把每行的结果添加到最后的总结果中.
8>. 解析完以后就获取了一个List< List < String > > 类型的对象了.

需要用到的jar包

源码

public class ReadExcel {
	public static void main(String[] args) {
		try {
			List<List<String>> resultXls = readXls("D:/study/MyEclipse/WorkSpace/myCode/test.xls");
			for(List<String> list : resultXls){
				for(String str : list){
					System.out.print(str + "\t");
				}
				System.out.println();
			}
System.out.println("-----------------------");
			List<List<String>> resultXlsx = readXlsx("D:/study/MyEclipse/WorkSpace/myCode/test.xlsx");
			for(List<String> list : resultXlsx){
				for(String str : list){
					System.out.print(str + "\t");
				}
				System.out.println();
			}
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//读取2003版本的xls文件
	private static List<List<String>> readXls(String path) throws IOException {
		InputStream is = new FileInputStream(path);
		//整个excel
		HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
		List<List<String>> result = new ArrayList<List<String>>();
		for (int sheet = 0, sheetNum = hssfWorkbook.getNumberOfSheets(); sheet < sheetNum; sheet++) {
			//页
			HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(sheet);
			if(null == hssfSheet)
			{
				continue;
			}
			for(int row = 0, rowNum = hssfSheet.getPhysicalNumberOfRows(); row < rowNum; row++){
				//行
				HSSFRow hssfRow = hssfSheet.getRow(row);
				int minColIx = hssfRow.getFirstCellNum();
				int maxColIx = hssfRow.getLastCellNum();
				List<String> rowList = new ArrayList<String>();
				for(int col = minColIx; col <= maxColIx; col++){
					//单元格
					HSSFCell hssfCell = hssfRow.getCell(col);
					if(null == hssfCell)
					{
						continue;
					}
					rowList.add(hssfCell.toString());
				}
				result.add(rowList);
			}
		}
		is.close();
		return result;
	}
	
	//读取2007版本的xlsx文件
	private static List<List<String>> readXlsx(String path) throws IOException {
		InputStream is = new FileInputStream(path);
		XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
		List<List<String>> result = new ArrayList<List<String>>();
		for (int sheet = 0, sheetNum = xssfWorkbook.getNumberOfSheets(); sheet < sheetNum; sheet++) {
			XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(sheet);
			if(null == xssfSheet)
			{
				continue;
			}
			for(int row = 0, rowNum = xssfSheet.getPhysicalNumberOfRows(); row < rowNum; row++){
				XSSFRow xssfRow = xssfSheet.getRow(row);
				int minColIx = xssfRow.getFirstCellNum();
				int maxColIx = xssfRow.getLastCellNum();
				List<String> rowList = new ArrayList<String>();
				for(int col = minColIx; col <= maxColIx; col++){
					XSSFCell xssfCell = xssfRow.getCell(col);
					if(null == xssfCell)
					{
						continue;
					}
					rowList.add(xssfCell.toString());
				}
				result.add(rowList);
			}
		}
		is.close();
		return result;
	}
}

 

© 著作权归作者所有

共有 人打赏支持
vapy
粉丝 0
博文 5
码字总数 2000
作品 0
哈尔滨
程序员

暂无相关文章

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 46分钟前 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部