spring 导出实现 基于POI

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/X_kai_style/article/details/82222733

我的项目是springboot项目和前端的项目分离,经过大量测试实现了导出

1.maven依赖

<dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-base</artifactId>
      <version>3.0.3</version>
    </dependency>
    <dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-web</artifactId>
      <version>3.0.3</version>
    </dependency>
    <dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-annotation</artifactId>
      <version>3.0.3</version>
    </dependency>

注意:我的项目中,添加依赖之后,idea编译器报错,jar包产生了冲突,如果没有产生冲突可跳过第二部,产生冲突则看第二步。

2.解决jar包冲突

第二个依赖中可以添加<exclusion> 这个标签,这个标签是用来解决jar包冲突的,我依赖的别的包中存在了,所以在当前的这个依赖中将多余的jar包排除掉。

<dependency>
      <groupId>cn.afterturn</groupId>
      <artifactId>easypoi-web</artifactId>
      <version>3.0.3</version>
      <exclusions>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

3.Controller 层代码

@RequestMapping("/excelImport")
    @ResponseBody
    public void exportExcel(ReqPojo reqPojo, HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 告诉浏览器用什么软件可以打开此文件
        response.setHeader("content-Type", "application/vnd.ms-excel");
        // 下载文件的默认名称
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户数据表","UTF-8") + ".xls");
        //编码
        response.setCharacterEncoding("UTF-8");


        //这里放自己想要的对象的集合,通过service获得集合
        List<ResPojo> pojoList = ordService.exportExcelInvoice(reqPojo);

        //对象类,集合对象,
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ResPojo.class, pojoList);
        workbook.write(response.getOutputStream());
    }

4.实体类代码

导出的数据中之后存在数据,不会存在Excel中每个列的头部,并且数据库中通常存放的是代号10,20,30,导出的Excel中应该是对应的汉字,以及对时间的处理,所以可以对实体类进行处理,添加注解。

/**
 * @Desc:
 * @Author: sk
 * @Date: 2018/8/27
 */
@Data
public class ResInvoicePojo implements Serializable {
    private static final long serialVersionUID = 5613744953739462389L;

    @Excel(name = "序号", orderNum = "0")
    private String id;// '序号',

    @Excel(name = "来源", replace = {"pc_10", "Android_20", "apple_30"}, orderNum = "1")
    private Integer platform; // 来源:pc-10;Android-20;apple-30

    @Excel(name = "提交时间",  exportFormat = "yyyy-MM-dd HH:mm:ss", orderNum = "2")
    private Date commit_date;// '提交时间',

5.前端代码

service和dao层产生的数据过程就不写了,都懂得,上前端代码。

注意:  ajax 不能实现导出,导出的接口不能用ajax调用。

导出按钮:

<a class="btn btn-secondary radius size-S ml-10" id="js-export" onclick="derive()">导&nbsp;&nbsp;出</a></div>

JavaScript实现:

function  derive() {
        id=$("#id").val(), //序号
        platform=$("#platform").val(), //来源
        commit_time= $("#commit_time").val(), //提交时间
        //在这里使用的是get请求,可以传递查询的参数
        $('#js-export').attr('href',"http://192.168.0.0:8080/export"+'?'+'id='+''+id+''+'&platform='+''+platform+'&commit_time='+''+commit_time);
    }

6.附上导入Controller代码一份

@RequestMapping("/excelImport")
    @ResponseBody
    public String excelImport() {
        ImportParams importParams = new ImportParams();
        ImportParams params = new ImportParams();
        params.setHeadRows(2);
        try {
            List<ReqPojo> list= ExcelImportUtil.importExcel(new File("D:\\数据表.xls"), ReqPojo.class,importParams);
            reqService.importUser(list);
            return "Excel导入成功";
        }catch (Exception e){
            e.printStackTrace();
            return "Excel导入失败";
        }
    }

猜你喜欢

转载自blog.csdn.net/X_kai_style/article/details/82222733