记录一个Excel文件读取的工具类,相信不少朋友都在开发时,处理Excel文件时不知如何解决。下面就看一下这个问题如何解决。
当然你也可以使用其他版本,旧版本的Excel使用的依赖不是同一个
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
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();
}
}
/**
* 读取excel数据写到集合中
* @param excelFilePath 文件地址
* @return
*/
static List<List<String>> readExcel(String excelFilePath) {
// 存储Excel数据的List
List<List<String>> excelData = new ArrayList<>();
try (FileInputStream fis = new FileInputStream(excelFilePath);
XSSFWorkbook workbook = new XSSFWorkbook(fis)) {
// 仅处理第一个Sheet
Iterator<Row> rowIterator = workbook.getSheetAt(0).iterator();
// 迭代处理每一行
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.iterator();
// 存储一行数据的List
List<String> rowData = new ArrayList<>();
// 迭代处理每个单元格
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 "";
}
}
public static void main(String[] args) {
//读取excel数据写到集合中
List<List<String>> excelData = readExcel("D:\\work\\javassit\\IndividualTest\\newExcel.xlsx");
// 打印读取的数据
for (List<String> row : excelData) {
for (String cellValue : row) {
System.out.print(cellValue + "\t");
}
System.out.println();
}
}