记录一个Excel文件读取的工具类,相信不少朋友都在开发时,处理Excel文件时不知如何解决。下面就看一下这个问题如何解决。
分享一下我的解决方案第一步先创建一个Excel文件,在其中添加内容第二步导入依赖当然你也可以使用其他版本,旧版本的Excel使用的依赖不是同一个
代码语言:javascript复制
接下来写一个main函数代码语言:javascript复制public static void main(String[] args) {
try {
// 1. 通过文件路径创建文件输入流
FileInputStream fileInputStream = new FileInputStream(new File("D:\\work\\javassit\\IndividualTest\\newExcel.xlsx"));
// 2. 创建工作簿对象
Workbook workbook = new XSSFWorkbook(fileInputStream);
// 3. 获取第一个工作表
Sheet sheet = workbook.getSheetAt(0);
// 4. 迭代每一行
for (Row row : sheet) {
// 5. 迭代每一列
for (Cell cell : row) {
// 6. 根据单元格类型读取数据
switch (cell.getCellType()) {
case STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
case BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t");
break;
case BLANK:
System.out.print("BLANK\t");
break;
default:
System.out.print("UNKNOWN\t");
}
}
System.out.println(); // 换行
}
// 7. 关闭文件输入流
fileInputStream.close();
// 8. 关闭工作簿
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}测试一下,结果打印正常接下来将它封装为一个工具类,请求参数为文件地址返回参数为一个list代码语言:javascript复制 /**
* 读取excel数据写到集合中
* @param excelFilePath 文件地址
* @return
*/
static List> readExcel(String excelFilePath) {
// 存储Excel数据的List
List> excelData = new ArrayList<>();
try (FileInputStream fis = new FileInputStream(excelFilePath);
XSSFWorkbook workbook = new XSSFWorkbook(fis)) {
// 仅处理第一个Sheet
Iterator
// 迭代处理每一行
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator
// 存储一行数据的List
List
// 迭代处理每个单元格
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
// 将所有单元格的内容转为String类型
rowData.add(cellToString(cell));
}
// 将一行数据添加到总数据List中
excelData.add(rowData);
}
} catch (Exception e) {
e.printStackTrace();
}
return excelData;
}
/**
* 将单元格内容转为String
* @param cell 单个单元格对象
* @return
*/
private static String cellToString(Cell cell) {
//获取 Excel 单元格的数据类型
switch (cell.getCellType()) {
//字符串类型
case STRING:
return cell.getStringCellValue();
//数字类型(包括日期和时间)
case NUMERIC:
return Double.toString(cell.getNumericCellValue());
//布尔类型
case BOOLEAN:
return Boolean.toString(cell.getBooleanCellValue());
//单元格为空
case BLANK:
return "";
//其他类型
default:
return "";
}
}
测试一下工具类。代码语言:javascript复制 public static void main(String[] args) {
//读取excel数据写到集合中
List> excelData = readExcel("D:\\work\\javassit\\IndividualTest\\newExcel.xlsx");
// 打印读取的数据
for (List
for (String cellValue : row) {
System.out.print(cellValue + "\t");
}
System.out.println();
}
}结果也正常。你也可以将它进行改造,使它符合你需要的功能。