读取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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值