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包有:
很多人都困惑POI那么多Jar到底应该导入哪一个。
实际上很多时候我们只利用POI来操作Excel。甚至只用xls这一种格式。
那么就没有必要全部都导入了。具体应该使用哪个JAR包请参考以下内容:
当我们只要使用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集合中
亲测有效