導入時的坑:
如果excel導入的數據類型 和 bean的數據類型不匹配,會報錯
導入依賴
<!--excel 基於poi的再次封裝-->
<dependency>
<groupId>com.jvm123</groupId>
<artifactId>excel-converter</artifactId>
<version>1.0</version>
</dependency>
Excel-converter 是一個基於poi的,將excel中的數據讀取爲java對象,以及將java對象的list導出到excel的工具 。
導入的工具類:
/**
* @Description
* @Author by mocar小師兄
* @Date 2020/5/12 22:45
**/
@Component
public class ExcelHandleUtils {
//解析爲map
public Result uploadFileToMap(MultipartFile file) throws IOException {
try {
String fileName = file.getOriginalFilename();
String fileExtName = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
//獲取輸入流
InputStream is = file.getInputStream();
ExcelImporter excelImporter = new ExcelImporter();
excelImporter.setExcelProperties(getExcelHandleProperties());
// 讀取爲 List<Map> 其中,map結果:key爲bean的變量名
List<Map<String, Object>> excelMapList = excelImporter.convertToMap(is);
for (Map<String, Object> map : excelMapList) {
System.out.println(map);
}
} catch (IOException e) {
e.printStackTrace();
}
return ResultUtil.error("Excel解析失敗");
}
//封裝爲obj
public <T> Result uploadFileToObj(MultipartFile file,Class<T> tClazz) throws IOException {
try {
String fileName = file.getOriginalFilename();
String fileExtName = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
//獲取輸入流
InputStream is = file.getInputStream();
ExcelImporter excelImporter = new ExcelImporter();
excelImporter.setExcelProperties(getExcelHandleProperties());
// 讀取爲 List<對象>
//坑:如果excel導入的數據類型 和 bean的數據類型不匹配,會報錯
//List<T> convertList = excelImporter.convert(file.getInputStream(), tClazz);
Date date = new Date();
System.out.println(date);
List<T> convertList = excelImporter.convert(file.getInputStream(), tClazz);
for (T t : convertList) {
User user = (User) t;
System.out.println(user);
}
} catch (IOException e) {
e.printStackTrace();
}
return ResultUtil.error("Excel解析失敗");
}
private ExcelProperties getExcelHandleProperties(){
ExcelProperties properties = new ExcelProperties();
//要導入的表格(sheet)在excel文件中的索引順序
properties.setSheetIndex(0);
//對應每一列的說明的行的序號(可無)--> 即別名
properties.setCommentRowIndex(0);
//對應java中bean屬性名稱的行的序號 --> 即變量名
properties.setNameRowIndex(1);
//要獲取的數據開始行的序號-->即數據從第幾行開始
properties.setFirstDataRowIndex(2);
//要獲取的數據結束行的序號(可無)-->即最後一行數據在第幾行
//properties.setLastDataRowIndex(3);
//要獲取的數據的條數(可無)
//properties.setDataRowNum(2);
return properties;
}
}
參考:
http://jvm123.com/2019/08/excel-converter.html