springboot + vue + easyexcel 实现简单的excel数据导入

1、引入 easyexcel依赖

<dependency> 
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>${easyexcel.version}</version>
</dependency>

SubjectVo实体类

package com.ruoyi.subject.domain.vo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


/**
 * 学科视图对象 tb_subject
 *
 * @author ruoyi
 * @date 2023-09-22
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ExcelIgnoreUnannotated
@ApiModel(value="学科 vo对象 ", description="学科vo对象 tb_subject")
public class SubjectVo {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @ApiModelProperty(value = "主键")
    private Long id;

    /**
     * 排序
     */
    @ApiModelProperty(value = "排序")
    @ExcelProperty(value = "排序")
    private Long sort;

    /**
     * 门类
     */
    @ExcelProperty(value = "门类", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "subject_category")
    @ApiModelProperty(value = "门类")
    private String category;

    /**
     * 专业类
     */
    @ExcelProperty(value = "专业类", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "speciality_type")
    @ApiModelProperty(value = "专业类")
    private String specialityType;

    /**
     * 上级学科代码
     */
    @ApiModelProperty(value = "上级学科代码")
    private String parentCode;

    /**
     * 学科代码
     */
    @ApiModelProperty(value = "学科代码")
    @ExcelProperty(value = "学科代码")
    private String code;

    /**
     * 学科名称
     */
    @ApiModelProperty(value = "学科名称")
    @ExcelProperty(value = "学科名称")
    private String name;

    /**
     * 学位授予门类
     */
    @ExcelProperty(value = "学位授予门类", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "subject_category")
    @ApiModelProperty(value = "学位授予门类")
    private String degreeGrantingType;

    /**
     * 修业年限
     */
    @ApiModelProperty(value = "修业年限")
    @ExcelProperty(value = "修业年限")
    private String schoolingYears;

    /**
     * 增设年份
     */
    @ApiModelProperty(value = "增设年份")
    @ExcelProperty(value = "增设年份")
    private String addYear;



}

注意:导入的表格中所需要的字段在实体类中必须加上 @ExcelProperty()

2、service层

List<SubjectVo> importData(MultipartFile file)

3、serviceImpl层

  //数据导入
    @Override
    public List<SubjectVo> importData(MultipartFile file) throws IOException {
        List<SubjectVo> subjectVoList = EasyExcel.read(file.getInputStream())
                .head(SubjectVo.class)
                .sheet()
                .doReadSync();
        log.info("导入数据:{}",subjectVoList);
        if (null != subjectVoList){
            for (SubjectVo vo : subjectVoList) {
                Subject subject = new Subject();
                BeanUtils.copyProperties(vo,subject);//对象转换
                subject.setId(System.currentTimeMillis());
                subject.setDelFlag("0");
                baseMapper.insert(subject);
            }
        }
        return subjectVoList;
    }

4、controller层

 //数据导入
    @PostMapping("/importData")
    @ApiOperation("数据导入")
    public R<?> importData(@RequestPart("file") MultipartFile file) throws IOException {
        return R.ok(iSubjectService.importData(file));
    }

5、使用Apifox工具进行测试

 6、vue前端页面

 <el-upload
          class="upload-demo"
          action="http://localhost:8080/subject/subject/importData"
          :show-file-list="false"
          :on-success="successCallback"
          :on-progress="progress"
          >
          <el-button size="small" type="primary">数据导入</el-button>
        </el-upload>

action为后端controller的接口,由于这种方式没设置token,所以,如果采用这种简单方法,需要将请求接口加入白名单放行。

其中:

:on-success是文件上传成功时调用的函数

:on-progress是文件上传时调用的函数

:show-file-list是  是否显示已上传文件列表

successCallback函数:

successCallback(res,file,fileList){
      if (res.code == 200){
        this.$loading().close()
        this.$message.success("数据导入成功!")
        this.getList();
      }
    },

progress函数:

    progress(event,file,fileList){
      this.$loading({
        lock: true,
        text: "正在导入数据,请稍等...",
        spinner: 'el-icon-loading',
        background: 'rgba(0,0,0,0.5)'
      })
    },

7、前端上传效果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实现上传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的配置文件中配置数据库连接信息、数据源等相关信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值