首页 > 其他分享 >EasyExcel

EasyExcel

时间:2023-07-22 13:45:02浏览次数:29  
标签:EasyExcel ret public toString date data response

依赖配置:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel<artifactId>
    <version>2.2.0-beta2</version>
</dependency>

实体类配置:

@Data
public class SubjectEeVo {

    @ExcelProperty(value = "id" ,index = 0)
    private Long id;

    @ExcelProperty(value = "课程分类名称" ,index = 1)
    private String title;

    @ExcelProperty(value = "上级id" ,index = 2)
    private Long parentId;

    @ExcelProperty(value = "排序" ,index = 3)
    private Integer sort;

}

导入时,需要配置监听器

@Component
public class SubjectListener extends AnalysisEventListener<SubjectEeVo> {
    @Resource
    private SubjectMapper dictMapper;
    //一行一行读取
    @Override
    public void invoke(SubjectEeVo subjectEeVo, AnalysisContext analysisContext) {
        //调用方法添加数据库
        Subject subject = new Subject();
        BeanUtils.copyProperties(subjectEeVo,subject);
        dictMapper.insert(subject);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }
}

导入业务:

 @PostMapping("importData")
    public Result importData(MultipartFile file) {
        subjectService.importDictData(file);
        return Result.ok();
    }
    /**
           * 导入
    */
    @Override
    public void importDictData(MultipartFile file) {
        try {
            EasyExcel.read(file.getInputStream(),
                    SubjectEeVo.class,subjectListener).sheet().doRead();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

导出业务:

 @GetMapping(value = "/exportData")
    public void exportData(HttpServletResponse response) {
        subjectService.exportData(response);
    } 
    /**
     * 导出课表
     * @param response
     */
    @Override
    public void exportData(HttpServletResponse response) {

        try {
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
            String fileName = URLEncoder.encode("课程分类", "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename="+ fileName + ".xlsx");
            List<Subject> dictList = baseMapper.selectList(null);
            List<SubjectEeVo> dictVoList = dictList.stream().map(sub -> {
                SubjectEeVo subjectEeVo = new SubjectEeVo();
                BeanUtils.copyProperties(sub, subjectEeVo);
                return subjectEeVo;
            }).collect(Collectors.toList());
            EasyExcel.write(response.getOutputStream(), SubjectEeVo.class)
                    .sheet("课程分类").doWrite(dictVoList);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

曲线图:

<template>
    <div class="app-container">
      <!--表单-->
      <el-form :inline="true" class="demo-form-inline">
        <el-form-item>
          <el-date-picker
            v-model="startDate"
            type="date"
            placeholder="选择开始日期"
            value-format="yyyy-MM-dd" />
        </el-form-item>
        <el-form-item>     
          <el-date-picker
            v-model="endDate"
            type="date"
            placeholder="选择截止日期"
            value-format="yyyy-MM-dd" />
        </el-form-item>
        <el-button
          :disabled="btnDisabled"
          type="primary"
          icon="el-icon-search"
          @click="showChart()">查询</el-button>
      </el-form>
      <div id="chart" class="chart" style="height:500px;" />
    </div>
  </template>
  <script>
  import echarts from 'echarts'
  import api from '@/api/vod/videoVisitor'
  
  export default {
    data() {
      return {
        courseId: '',
        startDate: '',
        endDate: '',
        btnDisabled: false
      }
    },
    created() {
      this.courseId = this.$route.params.id
      // 初始化最近十天数据
      let currentDate = new Date();
      this.startDate = this.dateFormat(new Date(currentDate.getTime()-7*24*3600*1000))
      this.endDate = this.dateFormat(currentDate)
      this.showChart()
    },
    methods: {
      showChart() {
        api.findCount(this.courseId, this.startDate, this.endDate).then(response => {
          this.setChartData(response.data)
        })
      },
      setChartData(data) {
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('chart'))
        // 指定图表的配置项和数据
        var option = {
          title: {
            text: '观看课程人数统计'
          },
          xAxis: {
            data: data.xData
          },
          yAxis: {
            minInterval: 1
          },
          series: [{
            type: 'line',
            data: data.yData
          }]
        }
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option)
      },
      dateFormat(date) {
        let fmt = 'YYYY-mm-dd'
        let ret;
        const opt = {
          "Y+": date.getFullYear().toString(),        // 年
          "m+": (date.getMonth() + 1).toString(),     // 月
          "d+": date.getDate().toString(),            // 日
          "H+": date.getHours().toString(),           // 时
          "M+": date.getMinutes().toString(),         // 分
          "S+": date.getSeconds().toString()          // 秒
          // 有其他格式化字符需求可以继续添加,必须转化成字符串
        };
        for (let k in opt) {
          ret = new RegExp("(" + k + ")").exec(fmt);
          if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
          };
        };
        return fmt;
      }
    }
  }
  </script>

 

标签:EasyExcel,ret,public,toString,date,data,response
From: https://www.cnblogs.com/jessi200/p/17573260.html

相关文章

  • EasyExcel 根据实体类自动导出需要的字段
    背景开发一个通用的数据规则模板一个用于存放所有数据的表rule_data一个用于字段对照的模板rule_template界面上的字段标头,使用template的映射,所有数据,都存在data表,通过ruleId区分所属业务2.需求根据不同的业务导入导出数据要点:data表数据字段在不同的业务中......
  • SpringBoot整合EasyExcel 3.x
    目录1EasyExcel3.x1.1简介1.2引入依赖1.3简单导出1.3.1定义实体类1.3.2自定义转换器1.3.3定义接口1.4简单导入1.5复杂导出1.5.1引言1.5.2自定义注解1.5.3定义实体类1.5.4数据映射与平铺1.5.5自定义单元格合并策略1.5.6定义接口1EasyExcel3.x1.1简介EasyExce......
  • easyExcel 动态列以及自适应列宽的实现
    easyExcel动态列以及自适应列宽的实现在使用EasyExcel实现动态表头和数据以及自适应列宽时,可以按照以下步骤进行操作:1.动态表头和数据:EasyExcel提供了@ExcelProperty注解来指定对象属性与Excel列之间的映射关系。我们可以通过定义一个包含所有可能出现的列名作为键和对......
  • EasyExcel实现excel文件重复多次写入和导出&下载文件
    一、EasyExcel实现excel文件的导出官方文档导入依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>......
  • EasyExcel 根据模板复制Sheet并将数据分页填充
    需求指定Excel模板文件,只给一个Sheet每个Sheet填充指定数量的数据,超过指定条数,根据模板Sheet复制并且追加数据准备工作引入easyExcelpom依赖<!--https://mvnrepository.com/artifact/com.alibaba/easyexcel--><dependency><groupId>com.alibaba</group......
  • EasyExcel 动态表头模板下载
    List<List<String>>list=newArrayList<List<String>>();List<String>head0=newArrayList<String>();head0.add("VIN");list.add(head0);if("1".equals(type)){......
  • EasyExcel validator校验 及自定义 枚举校验
    需要校验的实体importcom.alibaba.excel.annotation.ExcelIgnore;importcom.alibaba.excel.annotation.ExcelProperty;importcom.alibaba.excel.annotation.write.style.ColumnWidth;importcom.ruoyi.system.domain.enums.RoleStatusEnum;importcom.ruoyi.system.domain......
  • easyexcel 导入导出
    工具类-----------------------------------------------------publicclassExcelUtilextendsEasyExcelFactory{/***批量导入*@paraminputStream*@paramhead*@paramreadListener*/publicstaticvoidimportExcel(InputStreaminputS......
  • springboot集成easyexcel实现导入导出
    1、添加依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency>2、controller/***基于Liste......
  • 使用EasyExcel对excel数据进行相似度判断
    @DatapublicclassExeclDto{/***execl表*/privateStringfilename;/***需要匹配的工作表名*/privateStringname1;/***需要匹配的工作表名*/privateStringname2;} @SpringBootTest@Slf4j......