SSM+vue上传excel文件,并导入数据库

24 篇文章 1 订阅
<el-row>
	<el-form-item label="批量导入:">
		<el-upload 
		action="" 
		:auto-upload="false" 
		:file-list="fileList" 
		:on-change="handleChange"
		accept=".xls,.xlsx">
			<el-button slot="trigger" type="primary" @click="delFile">选取文件</el-button>
			<el-button type="success" @click="submitUpload" :loading="uploadLoading">上传到服务器</el-button>
			<div slot="tip" class="el-upload__tip">只能上传xls/xlsx文件</div>
		</el-upload>
	</el-form-item>
</el-row>

//重新选择的时候清除原来的文件
	delFile() {
		this.fileList = [];
	},
	//文件状态改变时的钩子函数
	handleChange(file, fileList) {
		this.fileList = fileList;
	},
	//单击上传到服务器(提交)按钮
	submitUpload() {
		if (this.fileList.length == 0) {
			return this.$message.error("请选择文件");
		}
		this.uploadLoading = true;
		let formData = new FormData(); //文件转换
		//fileList对应服务器接收名称
		formData.append("fileList", this.fileList[0].raw);
		console.log(formData);
		this.$axios.post('/wage/importWage', formData, {
				"Content-Type": "multipart/form-data;charset=utf-8"
			})
			.then(res => {
				this.uploadLoading = false;
				console.log(res);
				this.$message.success("导入成功");
				this.fileList = [];
				//获取列表
				this.getWageList();
			})
			.catch(error => {
				this.$message.error(error);
			})

	},
	handleSelect() {

			},
public Integer importWage(Sheet sheet) {
        //先清空表
//        salemanMapper.deleteAll();
        // 获取该工作表的第一行
        Row row = null;
        // 获取该工作表的第一个单元格
        Cell cell = null;
        //获得总列数
        int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();
        //获得总行数
        int rowNum=sheet.getPhysicalNumberOfRows();

        for (int i = 1; i < rowNum; i++) {//遍历行//i从1开始,是指从excel的第二行(去掉第一行的表头)
            // 在循环里面写,List保存的是引用,故在外边写会被覆盖,对象的地址相同
            Saleman saleman = new Saleman();
            row = sheet.getRow(i);
            for(int j=1; j<coloumNum; j++){//遍历列

                // 数字取整
                DecimalFormat df = new DecimalFormat("0.00");
                // 获取第I+1列 第j+1个单元格
                cell = row.getCell(j);

                String str = "";
                if(cell==null||cell.equals(null)||cell.getCellType()==CellType.BLANK){
                    str="null";
                }else {
                    //判断数据类型        cell.getCellFormula();
                    switch (cell.getCellType()) {
                        case FORMULA:
                            str = "" + cell.getNumericCellValue();     //单元格有公式的处理方式
                            break;
                        case NUMERIC:

                            DecimalFormat df1 = new DecimalFormat("#.##");    //单元格数字避免科学计数法
                            str = "" + df1.format(cell.getNumericCellValue());
//                            str = "" + cell.getNumericCellValue();

                            break;
                        case STRING:
                            str = cell.getStringCellValue();
                            break;
                        default:
                            break;
                    }
                }

                //判断是第几列,好存入对象

                if(j==1){
                    saleman.setDeptName(str);
                    //找到dept表的comcode
//                    Dept dept = deptMapper.findByDeptname(str);
//                    saleman.setComcode(dept.getComcode());
                }
                else if(j==2){
                    saleman.setComcode(str);
                }
                else if(j==3){
                    saleman.setType(str);
                }
                else if(j==4){
                    saleman.setUsername(str);
                }
                else if(j==5){
                    saleman.setNumberid(str);
                }
                else if(j==6){
                    saleman.setContype(str);
                }
                else if(j==7){
                    saleman.setBaseWage(str);
                }
                else if(j==8){
                    saleman.setAchieveWage(str);
                }
                else if(j==9){
                    saleman.setTotalWage(str);
                }
            }
            //检查人员重复问题
            Saleman s = salemanMapper.manByUsernam(saleman.getUsername());
            if(s==null){
                salemanMapper.add(saleman);
            }
            else{
                salemanMapper.update(saleman);
            }

        }

        return 1;
    }
//批量导入
    @RequestMapping("/importWage")
    @ResponseBody
    public String importWage(@RequestParam("fileList") MultipartFile multipartFile, HttpServletRequest request){
        //判断所上传文件是否存在
        if(multipartFile.isEmpty()){
            return "上传错误";
        }
        //获取上传文件的原始名称
        String originalFilename = multipartFile.getOriginalFilename();
        //设置上传文件的保存地址目录
        String dirPath = request.getSession().getServletContext().getRealPath("/upload/");
        File filePath = new File(dirPath);
        //如果保存的地址不存在,就先创建目录
        if (!filePath.exists()) {
            filePath.mkdirs();
        }
        //获取当前文件的后缀
        String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
        //获取当前时间并格式化
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(sdf.format(d) + originalFilename.substring(0,originalFilename.lastIndexOf(".")));
        String newFileName = sdf.format(d) + originalFilename.substring(0,originalFilename.lastIndexOf(".")) + "." + suffix;

        //使用UUID重新命名上传的文件名称(UUID(唯一识别码)+原始文件名称后缀)
//        String newFileName = UUID.randomUUID() + "." + suffix;
        File targetFile = new File(dirPath + newFileName);
        try {
            //创建可能会有错误,强制添加异常
            multipartFile.transferTo(targetFile);

            //插入数据库
            InputStream in = new FileInputStream(targetFile);

//            HSSFWorkbook workbook = new HSSFWorkbook(in);// 创建对Excel工作薄
//            HSSFSheet sheet = workbook.getSheetAt(0);

            Workbook workbook = WorkbookFactory.create(in);
            Sheet sheet = workbook.getSheetAt(0);

            // 调用Service,将数据插入Excel
            int i = salemanService.importWage(sheet);
            System.out.println("--------------------------"+i);
//            if (i > 0) {
//                return "导入成功";
//            } else {
//                return "导入失败";
//            }
        } catch (IOException e) {
            e.printStackTrace();
            return "上传错误";
        }
        System.out.println(dirPath + newFileName);
        return "上传成功"+"文件地址="+dirPath + newFileName;
    }
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值