如果你清楚原始poi操作Excel导出的操作,那么导入的操作就很简单了,之前写了利用poi操作excel实现复杂表格导出,可以快速了解导出操作!!!
传送门:Poi实现复杂Excel导出,理解POI操作Excel思路!!!
思路
思路和poi导出一样,核心五步
1、获取workbook,XSSFWorkbook创建的是.xlsx后缀文件,HSSFWorkbook创建的是.xls后缀文件
java
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
2、根据workboot获取sheet
java
XSSFSheet sheet = workbook.getSheetAt(0);
3、根据sheet获取行
java
XSSFRow row = sheet.getRow(0);
4、根据行获取单元格
java
XSSFCell cell = row.getCell(0);
5、根据单元格获取数据
java
String value = cell.getRichStringCellValue()
代码
java
public String importExcel(MultipartFile file) throws IOException {
// 获取workboot
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
// 获取sheet,0代表获取一个sheet
XSSFSheet sheet = workbook.getSheetAt(0);
// 获取一共有多少行数据
int lastRowNum = sheet.getLastRowNum();
// 接收excel数据
List<Map<String, String>> list = new ArrayList<>();
// 数据是从第四行开始
for (int i = 3; i < lastRowNum; i++) {
Map<String, String> map = new LinkedHashMap<>();
// 获取当前行
XSSFRow row = sheet.getRow(i);
// 一共六列数据
List<String> data = new ArrayList<>();
for (int j = 0; j < 6; j++) {
// 获取当前行一个单元格
XSSFCell cell = row.getCell(j);
// 获取该单元格数据
String value = getCellValue(cell);
data.add(value);
}
// 将data数据封装到map
map.put("编号", data.get(0));
map.put("姓名", data.get(1));
map.put("年龄", data.get(2));
map.put("兴趣1", data.get(3));
map.put("兴趣2", data.get(4));
map.put("兴趣3", data.get(5));
list.add(map);
}
// 输出map
System.out.println(JSONUtil.toJsonStr(list));
return JSONUtil.toJsonStr(list);
}
public static String getCellValue(Cell cell) {
if (Objects.isNull(cell)) {
return "";
}
CellType cellType = cell.getCellType();
//字符串
if(cellType.equals(CellType.STRING)){
return cell.getRichStringCellValue().getString();
}else if(cellType.equals(CellType.NUMERIC)){
//数值
if (DateUtil.isCellDateFormatted(cell)) {
//日期类型
return cell.getDateCellValue() + "";
} else {
//数值类型
return cell.getNumericCellValue() + "";
}
}else if(cellType.equals(CellType.BOOLEAN)){
//布尔类型
return cell.getBooleanCellValue()? "TRUE" : "FALSE";
} else if (cellType.equals(CellType.FORMULA)) {
return cell.getCellFormula() + "";
} else {
return "";
}
}
导出结果:
总结,想要获取某个单元格数据,现获取当前行,在获取当前行当前列,定位到之后得判断该单元格数据是什么格式,不同的格式需要不同的方法获取值。