已解决 easypoi导出遇到的一些bug

springboot+vue

一, 遇到的问题:

问题一:java.lang.NoSuchMethodError:org.apache.poi.ss.usermodel.Cel1Style.setAlignment(S)V

这个问题有两个方面需要调试:

(1)pom文件中依赖的easypoi版本不兼容

(2)pom文件依赖不全    --详细的全部依赖后面会解释

问题二:后台正常运行,返回数据给前端,之后前端数据乱码解决

详细解决办法在下面第5条会解决

 问题三: java.lang.IllegalArgumentException: lastRow < firstRow || lastCol < firstCol

扫描二维码关注公众号,回复: 15821522 查看本文章

这个问题大致是排序上有问题,但是,但是!!导入正确的包是不需要进行排序的!!千万不要导错包!!! 正确包为:

cn.afterturn.easypoi.excel.annotation.Excel;

1.首先pom依赖的相关文件

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

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.15</version>
</dependency>

2.实体类注解@Excel 所依赖的包

cn.afterturn.easypoi.excel.annotation.Excel; !!!! 

 注意实体类引入的其他包会不同类型的错(深刻教训)

3.dao层和service层就不用过多解释了

4.controller层

public void export(HttpServletRequest request, HttpServletResponse response, TbSerRec tbSerRec) {
    QueryWrapper<TbSerRec> queryWrapper = new QueryWrapper<TbSerRec>();
    queryWrapper.eq("bank_type", tbSerRec.getBankType());
    if (tbSerRec.getBegin()!= null){
        queryWrapper.between("create_time",tbSerRec.getBegin(),tbSerRec.getEnd());
    }
    List<TbSerRec> list = tbSerRecService.list(queryWrapper);
    ExportParams exportParams = new ExportParams();
    exportParams.setTitle("服务记录");
    Workbook workbook = ExcelExportUtil.exportExcel(exportParams, TbSerRec.class, list);
    response.setHeader("content-Type", "application/vnd.ms-excel");
    response.setCharacterEncoding("UTF-8");
    try {
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("服务记录", "UTF-8") + ".xls");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    try {
        workbook.write(response.getOutputStream());
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (workbook != null) {
            try {
                workbook.close();
            } catch (IOException e) {
            }
        }
    }
}

前面是根据plus查询的一些数据库数据,可以根据自己的查询方法进行改动,之后的代码直接拷贝就可以了,其中标题和依赖的实体类Class,因人而异进行修改

5.vue层

   用ajax或者axios进行前后端交互的话前端响应到的数据会乱码

   下面是可以正常交互的vue端代码

axios.get("/portal/tbSerRec/export",{

                  params:{

                          bankType : this.nameCode

                  },

                  headers: { 'Content-Type': 'application/json,charset=utf-8'},    

                  responseType: 'arraybuffer', //二进制流

              }).then(res => {

                    console.log(res);

                    let blob = new Blob([res], { type: 'application/vnd.ms-excel,charset=utf-8' });            

                    let url =window.URL.createObjectURL(blob);            

                    let link = document.createElement('a');            

                    link.download = '服务记录.xlsx';            

                    link.href = url;            

                    link.click();

            });

其中请求路径和参数因人而异进行,之后的代码只需要拷贝到对应的函数中即可

猜你喜欢

转载自blog.csdn.net/nonita/article/details/121359275