java_web接收前端传的excel文件读取数据

2023-12-14 00:00:46

#本次做一个将患者数据导入到某个模块的功能,前期集成的代码时不时出现异常,本次进行修改记录

//controller层
 /**
     * 导入患者数据
     */
    @RejectReplayRequest
    @PostMapping("/importData")
    public Result<?> importData(HttpServletRequest request, LoginUser loginUser, @Param(value = "articleExtDataReq") String articleExtDataReq) throws IOException, ParseException {
        JSONObject jsonObject = JSONObject.parseObject(articleExtDataReq);
        String merchantId = jsonObject.getString("articleId");
        return articleExtDataService.importData(request, loginUser, merchantId);
    }


//service层
/**
     * 导入更新商品
     */
    Result<?> importData(HttpServletRequest request, LoginUser loginUser, String articleId) throws IOException, ParseException;

//impl实现


    @Override
    public Result<?> importData(HttpServletRequest request, LoginUser loginUser, String articleId) throws IOException, ParseException {
        log.info("importData in articleId: " + articleId);
        //获取厂商信息
        Article byId = articleService.getById(articleId);
        if (Objects.isNull(byId)) {
            return Result.error("您选择的文章不存在");
        }
        Map<String, Long> titleAndIdMap = new HashMap<>();
        Map<Integer, Long> columnIndexAndExtIdMap = new HashMap<>();
        List<ArticleExt> articleExts = sysArticleExtService.listByArticleId(articleId, loginUser);
        articleExts.forEach(item -> {
            titleAndIdMap.put(item.getTitle(), item.getId());
        });

        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {

            List<ArticleExtData> articleExtDataList = new ArrayList<>();
            // 获取上传文件对象
            MultipartFile file = entity.getValue();
            InputStream inputStream = file.getInputStream();
            // 创建工作簿对象
            Workbook workbook = new XSSFWorkbook(inputStream);

            Date uploadDate = null;
            // 读取第一个工作表的数据
            Sheet sheet = workbook.getSheetAt(0);
            for (Row row : sheet) {
                int rowNum = row.getRowNum();
                Iterator<Cell> cellIterator = row.cellIterator();
                JSONObject jsonObject = new JSONObject();
                while (cellIterator.hasNext()) {
                    Cell cell = cellIterator.next();
                    cell.setCellType(CellType.STRING);
                    int columnIndex = cell.getColumnIndex();
                    // 处理单元格数据,这里只是简单地打印出来
                    String stringCellValue = cell.getStringCellValue();
//                    System.out.print(rowNum + "  " + columnIndex + "  " + stringCellValue + "\t");
                    if (rowNum == 0) {
                        Long ExtId = titleAndIdMap.get(stringCellValue);
                        if (ExtId == null && !stringCellValue.contains("时间")) {
                            //判断excel标题是否存在于系统
                            return Result.error("系统不存在【" + stringCellValue + "】参数,请在扩展数据中添加该参数信息");
                        }
                        if (ExtId != null) {
                            columnIndexAndExtIdMap.put(columnIndex, ExtId);
                        }
                    } else {
                        if (rowNum == 1 && columnIndex == 5 && stringCellValue.length() == 5) {
                            stringCellValue = DateUtils.ExcelDoubleToDate(stringCellValue);
                            uploadDate = DateUtils.parseDate(stringCellValue, "yyyy-MM-dd");
                        }
                        if (columnIndex != 5) {
                            jsonObject.put(String.valueOf(columnIndexAndExtIdMap.get(columnIndex)), stringCellValue);
                        }
                    }
                }
                ArticleExtData articleExtData = new ArticleExtData();
                articleExtData.setArticleId(articleId).setCreatedBy(loginUser.getId()).setUpdatedBy(loginUser.getId()).setValue(jsonObject.toJSONString()).setCreatedTime(uploadDate).setUpdatedTime(uploadDate);
                articleExtDataList.add(articleExtData);
//                System.err.println(jsonObject);
            }
            articleExtDataService.saveBatch(articleExtDataList);
        }

        return Result.OK("导入完成");
    }

前端代码

//html
<el-upload
              class="upload-demo"
              action="#"
              :show-file-list="false"
              :on-change="importData"
              :auto-upload="false"
              accept=".xlsx, .xls"
              style="display: inline; margin-right: 10px"
            >
              <el-button type="primary" icon="el-icon-download"
                >导入
              </el-button>
            </el-upload>
            <el-button type="text" @click="downTemplate()"
              >下载导入模板
            </el-button>


//js

import axios from "axios";

importData(param) {
      const that = this;
      showLoading(); //显示加载中
      let formData = new FormData(); //声明一个FormDate对象
      formData.append("file", param.raw); //把文件信息放入对象中
      formData.append(
        "articleExtDataReq",
        JSON.stringify(this.articleExtDataObj.formData)
      );
      this.path = localStorage.getItem("urlcode");
      let text = `${this.path}/articleExtData/importData`;
      axios({
        url: text,
        method: "post",
        async: false,
        processData: false,
        contentType: false, // 不设置数据类型
        data: formData,
        headers: {
          "X-Access-Token": sessionStorage.getItem("token")
        }
      })
        .then(res => {
          if (res.data.success == true) {
            that.$message({
              type: "success",
              message: res.data.message
            });
            setTimeout(() => {
              that.getlist();
            }, 600);
          } else {
            that.$message.error(res.data.message);
          }
        })
        .catch(err => {
          that.$message({
            type: "error",
            message: "导入失败"
          });
        });
      setTimeout(() => {
        hideLoading();
      }, 1200);
    },
    // 下载导入模板
    downTemplate() {
      window.open(
        "https://qiniu.sjhlwyy.com/ExcelTemp/Free_consultation_activities_Patient_data.xlsx"
      );
    },

文章来源:https://blog.csdn.net/weixin_42970071/article/details/134857900
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。