用POI将读取Excel文档的内容(列与列之间存在层级关系)

/**
* 用来做批量导入的方法

* 1:判断文件格式,循环导入每一行的数据

* 2:做条件判断和导入判断

*
* @param file 上传的文件
* @return 执行结果
* @throws IOException IO异常
* @throws SAXException SAX error or warning
* @throws InvalidFormatException 文件格式错误异常
*/
@SuppressWarnings(“unlikely-arg-type”)
@Transactional
@Override
public boolean getExcel(MultipartFile file) throws IOException, SAXException, InvalidFormatException {
String filename = file.getOriginalFilename();
// 判断是否为excel类型文件
if (!filename.endsWith(".xls") && !filename.endsWith(".xlsx")) {
throw new BusinessException(“文本格式不是Excel文档”);
}
// 得到工作薄
Workbook workbook = WorkbookFactory.create(file.getInputStream());
// 得到工作表
Sheet sheet = workbook.getSheet(“Sheet1”);
// 获得数据的总行数
int totalRowNum = sheet.getPhysicalNumberOfRows();
// 声明一个用于添加的表单对象
DepartmentFacultyForm depart = null;
// 行循环,第一行为表头,不是导入对象
for (int i = 1; i < totalRowNum; i++) {
// 得到第i行
Row row = sheet.getRow(i);
// 判断第一行是否存在空的情况
if (row.getCell(0) == null || “”.equals(row.getCell(0))) {
throw new BusinessException(“第一列存在空数据”);
}
depart = new DepartmentFacultyForm();
// 判断每一行的单元格数量
int cellnum = row.getPhysicalNumberOfCells();
// 超过三列将不导入
if (cellnum > 3) {
throw new BusinessException(“请删除前三列以外的数据再操作”);
}
// 声明数组存放每一行的数据
StringBuffer buf = new StringBuffer();
// 遍历每一行,得到每一行的单元格数据
for (int j = 0; j < cellnum; j++) {
if (row.getCell(j) != null) {// 判断单元格是否为空
// 获取当前单元格的内容
String text = row.getCell(j).getStringCellValue();
// 判断字符串的长度,超过20就只截取前20个字符
if (text.length() > 20) {
text = (text.substring(0, 20));
}
buf.append(text + “~”);
}
}
String hang = buf.toString();
String[] rows = hang.split("~");
for (int k = 0; k < rows.length; k++) {
// 调用查询方法,判断该字符在数据库是否存在;true不在,false在
if (findByNameIn(rows[k]) && k == 0) {// 说明是父级直接添加
depart.setName(rows[k]);
departmentFacultyService.addDepartment(depart);
} else if (findByNameIn(rows[k]) && k > 0) {// 说明不是父级,需要得到父级的id
depart.setName(rows[k]);
Long id2 = findByNameGetId(rows[k - 1]);
depart.setParentId(id2);
departmentFacultyService.addDepartment(depart);
}
}
}
return true;
}

/**
 * 验证对象是否为空
* * @param ob 传递的对象 * @return 结果,true为空,false不为空 */ private boolean isempty(Object ob) { if (ob == null) { return true; } ; if (ob instanceof Collection) { if (((Collection) ob).size() == 0) return true; } if ("".equals(ob)) { return true; } return false; } /** * 判断名字是否存在数据库
* true不在,false在 * * @param name 名字 * @return 结果 */ private boolean findByNameIn(String name) { DepartmentFaculty de = departmentFacultyRepository.findByName(name); if (isempty(de)) { return true; } else { return false; } } /** * 根据,名字查询id
* * @param name 名字 * @return id */ private Long findByNameGetId(String name) { DepartmentFaculty de = departmentFacultyRepository.findByName(name); return de.getId(); }

你可能感兴趣的:(下载Excel)