读取Excel表中的数据到数据库中
1、在Controller层构建一个接口
接口内容如下:
//存放要加载数据的excel的位置,最好写在Springboot的配置文件,在方法内直接使用@Value注解调用
String fileUrl = "C://temp//temp.xlsx";
//构建文件输入流
InputStream in = null;
try{
in = new FileInputStream(new File(fileUrl));
loadExcelToDatabaseService.LoadExcel(in);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
//关闭输入流
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
2.Service层内的代码如下:
//O_LeadDefault为对应的Excel中每一行数据所映射的对象
public List<O_LeadDefault> LoadExcel(InputStream in) throws Exception{
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(in);
List<XSSFRow> rowList = new ArrayList<XSSFRow>();
//循环表中的各个sheet
for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
if (xssfSheet == null) {
continue;
} else {
// sheet不为空
List<XSSFRow> rows = new ArrayList<XSSFRow>();
// 循环sheet中每一行Row(这里根据不同业务做对应处理,我这里跳过前两行的表头数据)
for (int rowNum = 2; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
if (xssfRow == null) {
continue;
}
// 将不为空的行放入
rows.add(xssfRow);
}
rowList.addAll(rows);
}
}
List<O_LeadDefault> datas = new ArrayList<O_LeadDefault>();
for (int rowNum = 0; rowNum < rowList.size(); rowNum++) {
XSSFRow xssfRow = rowList.get(rowNum);
if(xssfRow == null){
continue;
}
// 循环列Cell 获取字段相对应的列号。
XSSFCell xssfCell_classId = xssfRow.getCell(0);//分类ID
// XSSFCell xssfCell_disName = xssfRow.getCell(1);//分类显示名
// ...获取每一个单元格中的数据
String classId= getValue(xssfCell_classId);
// String disName= getValue(xssfCell_disName);
// ...获取对应的字符串
//购进对应的实体类对象
O_LeadDefault lead = new O_LeadDefault();
//lead.set...给实体类对象赋值
datas.add(lead);
}
logger.info("读取表格完毕,开始更新属性");
return datas;
}
@SuppressWarnings("static-access")
private String getValue(XSSFCell xssfCell){
String value = "";
if(null==xssfCell){
return value;
}
DecimalFormat df = new DecimalFormat("0.##");
if(xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN){
value = String.valueOf( xssfCell.getBooleanCellValue());
}else if(xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC){
value = df.format(xssfCell.getNumericCellValue());
}else if(xssfCell.getCellType() ==xssfCell.CELL_TYPE_FORMULA){
try {
value = String.valueOf(xssfCell.getNumericCellValue());
} catch (IllegalStateException e) {
value = String.valueOf(xssfCell.getRichStringCellValue());
}
}else{
xssfCell.setCellType(xssfCell.CELL_TYPE_STRING);
value = String.valueOf( xssfCell.getStringCellValue());
}
return value;
}