Spring+Vue+EasyExcel 实现Excel类型文件上传

一.Vue前端部分

前端用formData实现文件上传,也可以用Element-ui封装好的组件

具体参考:Upload上传

 <el-button type="primary" plain  size="mini" @click="upload()">
  文件上传       
</el-button>

upload() {
      const that = this;
      const fileType = ['xls', 'xlsx', 'et']
      const inputFile = document.createElement("input")
      inputFile.type = "file"
      inputFile.style.display = "none"
      document.body.appendChild(inputFile)
      inputFile.click()
      inputFile.addEventListener("change", function () {
        const file = inputFile.files[0];
        const msg = file.name.substring(file.name.lastIndexOf('.') + 1)
        if (!fileType.includes(msg)) {
          that.$message.warning("上传的文件格式只能是,xls,xlsx,et");
          document.body.removeChild(inputFile);
          return false;
        }
        const formData = new FormData();
        formData.append("file", file);
        //请求后端接口
        XXX(formData).then(res => {
          if (res.code === 200) {
            that.$message.success("上传成功")
          } else {
            that.$message.error("上传失败")
          }
        })
      })
    }

二.后端部分

1.需要在MAVEN中先导入easy-excel依赖

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>3.2.0</version>
            </dependency>

2.创建Excel和对应的POJO

 

注意:如果 使用了lombok的话,一定要设置@Accessors(chain = false),不然链式调用可能会导致无法赋值,Bean为空的情况@ExcelProperty()的属性对应excel标题行内容。

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false
public class ParkDTO {
    @ExcelProperty("停车场")
    private String parkName;
    @ExcelProperty("车位号")
    private String parkNo;
    @ExcelProperty("车牌号码")
    private String carNo;
    @ExcelProperty("车辆类型")
    private String carType;
}

3.编写接口用来接收请求

MultipartFile接收参数是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称。

@PostMapping("import-excel")
public CommonResult importExcel(@RequestParam("file") MultipartFile file) {
        try {
            List<ParkDTO> data 
                        = EasyExcel.read(file.getInputStream(), ParkDTO.class, null)
                            .autoCloseStream(false)  
                            .doReadAllSync();
            //控制台打印
            data.forEach(reqDTO-> System.out.println(reqDTO));
        } catch (IOException e) {
            log.error("导入失败:"+e);
        }
        return success("导入成功");
    }

控制台打印结果

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现excel文件并将数据输到数据库的步骤如下: 1. 前端实现文件功能:使用Vue.js开发前端页面,使用element-ui组件库实现文件组件。具体实现可以参考element-ui的文档和示例代码。 2. 后端实现文件功能:使用Spring Boot框架开发后端接口,使用Apache POI或者EasyExcel解析Excel文件并将数据存入数据库。具体实现可以参考Spring Boot官方文档和EasyExcel的官方文档。 3. 前后端交互:前端页面通过Ajax请求后端接口上文件,并将文件数据以form-data格式输到后端。后端接口接收到请求后,解析Excel文件并将数据存入数据库,最后返回上结果给前端。 下面是一个简单的示例代码,仅供参考: 前端代码: ```vue <template> <el-upload class="upload-demo" drag action="/api/upload" :before-upload="beforeUpload" :on-success="onSuccess" :on-error="onError" > <i class="el-icon-upload"></i> <div class="el-upload__text">将 Excel 文件拖到此处,或点击上</div> <div class="el-upload__tip" slot="tip">仅支持 .xls 和 .xlsx 格式的 Excel 文件</div> </el-upload> </template> <script> export default { methods: { beforeUpload(file) { const isExcel = file.type === 'application/vnd.ms-excel' || file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; if (!isExcel) { this.$message.error('只能上 .xls 或 .xlsx 格式的 Excel 文件'); } return isExcel; }, onSuccess(response) { if (response.code === 0) { this.$message.success('上成功'); } else { this.$message.error(`上失败: ${response.msg}`); } }, onError(error) { this.$message.error(`上失败: ${error.message}`); }, }, }; </script> ``` 后端代码: ```java @RestController @RequestMapping("/api") public class UploadController { @PostMapping("/upload") public Result<?> upload(@RequestParam("file") MultipartFile file) throws IOException { if (file.isEmpty()) { return Result.error("上失败: 文件为空"); } String filename = file.getOriginalFilename(); String ext = FilenameUtils.getExtension(filename); if (!"xls".equals(ext) && !"xlsx".equals(ext)) { return Result.error("上失败: 仅支持 .xls 或 .xlsx 格式的 Excel 文件"); } List<User> userList = new ArrayList<>(); Workbook workbook = WorkbookFactory.create(file.getInputStream()); Sheet sheet = workbook.getSheetAt(0); for (int i = 1; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); if (row == null) { continue; } User user = new User(); user.setName(row.getCell(0).getStringCellValue()); user.setAge((int) row.getCell(1).getNumericCellValue()); user.setGender(row.getCell(2).getStringCellValue()); userList.add(user); } userService.saveAll(userList); return Result.ok(); } } ``` 上述代码中,`UploadController`是一个Spring MVC的控制器类,用于处理上文件的请求。`upload`方法接收一个`MultipartFile`类型的参数,即前端上文件数据。在方法中,我们首先判断文件是否为空,然后根据文件的扩展名判断是否为Excel文件。如果不是Excel文件,则返回上失败的结果。否则,我们使用Apache POI库解析Excel文件,将数据转换成`User`对象并存入数据库。最后,返回上成功的结果。 需要注意的是,上述代码中的`User`对象是一个自定义的Java类,用于存储Excel中的数据。在实际开发中,需要根据实际情况定义相应的Java类来存储数据。同时,还需要在Spring Boot的配置文件中配置数据库连接信息、数据源等相关信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值