spring上传Excel文件批量导入数据

上传Excel文件批量导入数据

controller

@RequestMapping(value = "/importTemplate", method = RequestMethod.POST)
    @ResponseBody
    public Result importTemplate(
            ComplainSubmitBean complainBean, HttpServletRequest request, HttpSession session
    ) throws Exception {
        try {
            if (null == complainBean.getUploadFile()) {
                return Result.failure(ResultCode.FAILURE, "请上传文件!");
            }
            if ("null".equals(complainBean.getMonth())) {
                return Result.failure(ResultCode.FAILURE, "请填写日期!");
            }
            User user = CommonUtils.getUser(session);
            String content = null;
            int tCount;
            InputStream inputStream = complainBean.getUploadFile().getInputStream();
            String path = getExcelPath(request);
            tCount = 2;
            path = path + "XXXXXXXX.xlsx";
            content = readExcel(inputStream, tCount, path);
            ArrayList<XXXXXXXXXXXXXXXXBean> XXXXXXXXXXXXXXXXBeans = contentToBeanList(
                    content, tCount, user, complainBean.getMonth()
            );
            complainSatisfactionService.insertList(compSatBeans);
            return Result.success("上传成功");
        } catch (Exception e) {
            log.error(e.toString());
            return Result.failure(ResultCode.FAILURE, e.getMessage());
        }
    }

    public static String readExcel(InputStream inputStream, Integer rowTitleCount, String path) throws Exception {
        InputStream inputStreamTemplate = Files.newInputStream(Paths.get(path));
        Workbook workbook = new XSSFWorkbook(inputStream);
        Workbook workbookT = new XSSFWorkbook(inputStreamTemplate);
        Sheet sheet = workbook.getSheetAt(0);
        Sheet sheetT = workbookT.getSheetAt(0);
        StringBuilder content = new StringBuilder();
        StringBuilder contentTitle = new StringBuilder();
        StringBuilder contentTitleT = new StringBuilder();
        int rowCount = 0;
        int rowCountT = 0;
        // 判断上传的Excel和对应的模板是否对应
        for (Row row : sheetT) {
            // 如果是标题栏
            if (rowCountT <= rowTitleCount) {
                for (Cell cell : row) {
                    cell.setCellType(CellType.STRING);
                    contentTitleT.append(cell.getStringCellValue()).append("\t");
                }
                rowCountT++;
            } else {
                break;
            }
        }
        for (Row row : sheet) {
            // 如果是标题栏
            if (rowCount <= rowTitleCount) {
                for (Cell cell : row) {
                    cell.setCellType(CellType.STRING);
                    contentTitle.append(cell.getStringCellValue()).append("\t");
                }
                rowCount++;
                continue;
            }
            for (Cell cell : row) {
                cell.setCellType(CellType.STRING);
                content.append(cell.getStringCellValue()).append("\t");
            }
            content.append("\n");
        }
        workbook.close();
        if (!contentTitle.toString().contentEquals(contentTitleT)) {
            throw new Exception("该模板不匹配,请上传正确的模板!");
        }
        return content.toString();
    }

Bean

import org.springframework.web.multipart.MultipartFile;

public class XXXXXXXXBean {

    private String dataType;
    private String month;
    private MultipartFile uploadFile;

    public String getMonth() {
        return month;
    }

    public void setMonth(String month) {
        this.month = month;
    }

    public MultipartFile getUploadFile() {
        return uploadFile;
    }

    public void setUploadFile(MultipartFile uploadFile) {
        this.uploadFile = uploadFile;
    }

    public String getDataType() {
        return dataType;
    }

    public void setDataType(String dataType) {
        this.dataType = dataType;
    }

}

vue文件

uploadFiles() {
      let url = "/XXXXXXXX/importTemplate";
      if (this.formData.uploadFile === null) {
        this.$notify({title: '失败', message: "请上传文件!", type: 'error'});
      } else if (this.formData.month === null) {
        this.$notify({title: '失败', message: "请填写日期!", type: 'error'});
      }
      {
        // 重要,需要创建FormData对象存储文件并传到后端
        const formData = new FormData();
        formData.append("dataType", this.formData.dataType);
        formData.append("month", this.formData.month);
        formData.append("uploadFile", this.formData.uploadFile);
        this.dataImportLoading = true;
        postFormData(url, formData).then(res => {
          if (res.resultCode === '200') {
            this.$notify({title: '成功', message: '导入成功', type: 'success'});
            this.getCSList()
            this.dataImportDialogVisible = false
          } else {
            this.$notify({title: '失败', message: res.data, type: 'error'});
          }
          this.dataImportLoading = false;
        })
      }
    }

function postFormData(url, data) {
    return new Promise((resolve, reject) => {
        axios.post(url, data,{
            headers: {
                'Content-Type':'multipart/form-data'
            }
        }).then(res => {
             resolve(res.data)
        }).catch(err => {
             reject(err)
        })
    })
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值