java通过POI架包(HSSFWorkbook和XSSFWorkbook)读取Excel里面的内容包括(xls和xlsx)后缀文件

在我们平时的开发的过程,难免会遇到需要读取Excel文件,Excel文件又分为xls和xlsx文件,这篇文章通过POI中的HSSFWorkbook和XSSFWorkbook来读取Excel文件

POI版本的问题

poi-3.16.jar
poi-examples-3.16.jar
poi-excelant-3.16.jar
poi-ooxml-3.16.jar
poi-ooxml-schemas-3.16.jar
poi-scratchpad-3.16.jar

目前POI的最新发布版本是3.10_FINAL.该版本保护的jar包有:

java excelWriter输出值本地 java读取excel文件内容并输出_读取xlsx文件

很多人都困惑POI那么多Jar到底应该导入哪一个。

实际上很多时候我们只利用POI来操作Excel。甚至只用xls这一种格式。

那么就没有必要全部都导入了。具体应该使用哪个JAR包请参考以下内容:

java excelWriter输出值本地 java读取excel文件内容并输出_读取xlsx文件_02

当我们只要使用xls格式时、只要导入poi-version-yyyymmdd.jar就可以了。

当我们还要使用xlsx格式、还要导入poi-ooxml-version-yyyymmdd.jar。

至于poi-ooxml-schemas-version-yyyymmdd.jar这个jar基本不太会用到的。

当我们需要操作word、ppt、viso、outlook等时需要用到poi-scratchpad-version-yyyymmdd.jar。

直接上代码

读取excel中,xlsx后缀的文件

//读取excel中,xlsx后缀的文件
	public static List<String> searchExcelXlsx(String fileUrl){
		List<String> list = new ArrayList<>();
		// 用流的方式先读取到你想要的excel的文件
		FileInputStream fis;
		try {
			fis = new FileInputStream(new File(request.getSession().getServletContext().getRealPath(fileUrl)));
			// 获取整个excel
			XSSFWorkbook hb = new XSSFWorkbook(fis);
			System.out.println(hb.getNumCellStyles());
			// 获取第一个表单sheet
			Sheet 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();
					// 创建一个集合,用处将每一行的每一列数据都存入集合中
					for (int j = firstcell; j < lastcell; j++) {
						// 获取第j列
						Cell cell = row.getCell(j);
						if (cell != null) {
							//System.out.print("--->"+cell);
							list.add(cell.toString());
						}
					}
				}
			}
			return list;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

只需要传一个文件路径,就可以直接读取,读取是一行一行的,读取出来的内容有序的存放在List集合中

//读取读取excel中,xls后缀的文件

//读取读取excel中,xls后缀的文件
public static List<String> searchExcelXls(String fileUrl){
		List<String> list = new ArrayList<>();
		// 用流的方式先读取到你想要的excel的文件
		try {
			// 解析excel
			POIFSFileSystem pSystem = new POIFSFileSystem(new FileInputStream(request.getSession().getServletContext().getRealPath(fileUrl)));
			// 获取整个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
				HSSFRow row = sheet.getRow(i);
				if (row != null) {
					// 获取这一行的第一列
					int firstcell = row.getFirstCellNum();
					// 获取这一行的最后一列
					int lastcell = row.getLastCellNum();
					//将每一行的每一列数据都存入集合中
					for (int j = firstcell; j < lastcell; j++) {
						// 获取第j列
						HSSFCell cell = row.getCell(j);
						if (cell != null) {
							//System.out.print("---->"+cell+"\n" );
						}
						list.add(cell.toString());
					}
				}
			}
			return list;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

这个也是只需要传一个文件路径,就可以直接读取,读取是一行一行的,读取出来的内容有序的存放在List集合中

亲测有效