读取Excel表中的数据到数据库中

读取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;
}

猜你喜欢

转载自blog.csdn.net/origin_cx/article/details/109079965