Java工具类(4) ------>运用easyexcel生成Excel表格

摘要:
一、前言用java代码在后台实现导出excel表格可以说是很多服务器都需要集成的功能,实现的方法有Apache开源框架poi,或者jxl都可以实现,但是Apachepoi、jxl都存在一个严重的问题,那就是非常耗内存,严重时会导致内存溢出。

一、前言

java代码在后台实现导出excel表格可以说是很多服务器都需要集成的功能,实现的方法有Apache 开源框架 poi, 或者 jxl 都可以实现,但是Apache poijxl 都存在一个严重的问题,那就是非常耗内存严重时会导致内存溢出

所以这里可以用另一种方法,就是阿里出品的easyExcel,它主要解决了以下几点问题:

  • 传统 Excel 框架,如 Apache poi、jxl 都存在内存溢出的问题;
  • 传统 excel 开源框架使用复杂、繁琐;

EasyExcel 底层还是使用了 poi, 但是做了很多优化,如修复了并发情况下的一些 bug, 具体修复细节,可阅读官方文档https://github.com/alibaba/easyexcel

二、代码实现

1、向pom文件添加依赖

      <!--导出Excel需要包-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>1.1.2-beta5</version>
        </dependency>

2、model

类继承baseRowModel

属性字段上添加@ExcelProperty

value --标题

index --索引

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class WordExcelVo extends BaseRowModel implementsSerializable {
    private static final long serialVersionUID = 1L;

    /*** id
     */@ExcelProperty(value = "ID",index = 0)
    privateInteger id;

    /*** 英文
     */@ExcelProperty(value = "英文",index = 1)
    privateString english;

    /*** 汉语
     */@ExcelProperty(value = "汉语",index = 2)
    privateString chinese;

    /*** 作者(登录人)
     */@ExcelProperty(value = "作者",index = 3)
    privateString author;

    /*** 发布时间
     */@ExcelProperty(value = "发布时间",index = 4)
    privateDate commitTime;

    /*** 点赞数量
     */@ExcelProperty(value = "点赞数量",index = 5)
    privateInteger number;
}

3、导出主要代码

@Override
    public void exportExcel(List<Word>word, HttpServletResponse response) {
        try{
            String path =CommonPath.WORD_EXCEL_PATH.getValue();
            String fileName = System.currentTimeMillis() + ".xlsx";
            //创建文件
            File file = new File(path +fileName);
            OutputStream outputStream = newFileOutputStream(file);
            ExcelWriter writer =EasyExcelFactory.getWriter(outputStream);
            //只生成一个sheet
            Sheet sheet = new Sheet(1, 0, WordExcelVo.class);
            sheet.setSheetName("我的收藏");
            //写数据
writer.write(writeWord(word), sheet);
            writer.finish();
            outputStream.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
 /*** 赋值excel表格的数据
     *
     * @paramword List<Word>
     * @returnList<WordExcelVo>
     */
    private List<WordExcelVo> writeWord(List<Word>word) {
        List<WordExcelVo> wList = new ArrayList<>();
        for(Word aWord : word) {
            WordExcelVo wordExcelVo =WordExcelVo.builder()
                    .id(aWord.getId())
                    .chinese(aWord.getChinese())
                    .english(aWord.getEnglish())
                    .author(aWord.getAuthor())
                    .commitTime(aWord.getCommitTime())
                    .number(aWord.getNumber())
                    .build();
            wList.add(wordExcelVo);
        }
        returnwList;
    }

4、效果

Java工具类(4) ------&gt;运用easyexcel生成Excel表格第1张

5、在浏览器中弹出下载文件

Java工具类(4) ------&gt;运用easyexcel生成Excel表格第2张

弹出文件不用用Ajax的方式发送请求,需要用XMLHttpRequest的方式

前端发送请求示例:

let url = config.base_server + 'api-paper/question/exportQuestion?access_token=' +config.getToken().access_token;
            let xhr = newXMLHttpRequest();
            xhr.open('POST', url, true);
            xhr.responseType = "blob";
            xhr.setRequestHeader("client_type", "DESKTOP_WEB");
            xhr.onload = function() {
                if (this.status === 200) {
                    let blob = this.response;
                    window.location.href =URL.createObjectURL(blob);
                }
            };
            xhr.send();

后端代码也设置响应头等信息:

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + 文件名+ ".xls");
response.getOutputStream();

免责声明:文章转载自《Java工具类(4) ------&amp;gt;运用easyexcel生成Excel表格》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇数据库SQL优化大总结之 百万级数据库优化方案(转载)C#控件及常用设计整理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

前端导出Excel兼容写法

今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容。 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源,导出的写法也是不相同的。 技术方案 IE 无论数据来源是哪里,都是用ActiveXObject对象及相关的命令,IE10、11有点不同。  非IE 纯数据的...

JS获取照片拍摄的角度属性,用于旋转控制

在微信里ios手机上传竖拍照片会自动旋转90度,与拍摄时的角度不同,所以需要处理: 1、使用EXIF.js可以获取到照片的拍摄属性: API 方法 名称 说明 EXIF.getData(img, callback) 获取图像的数据 能兼容尚未支持提供 EXIF 数据的浏览器获取到元数据。 EXIF.getTag(img, tag) 获取图...

前端JS下载文件总结

Data URLs         Data URLs: 即前缀为data: 协议的URL,其允许内容创建者向文档中嵌入小文件。   例如:可以直接在HTML中的img元素直接使用Data URLs ; data:[<mediatype>][;base64],<data> mediatype: 是个 MIME 类型的字符串,例如...

javascript zip.js 压缩文件操作

https://stuk.github.io/jszip/documentation/examples.html web前端解压zip文件有什么用: 只考虑标准浏览器的话, 服务器只要传输压缩包到客户端, 节约了带宽, 而且节约了传输时间, 听起来好像很厉害的说; 如果前端的代码很多, 而且包含大副的图片,那么就可以把js和css和jpg和png等各种数据...

后端返回文件流,前端blob下载

后端 return response()->download(storage_path('app/public').$file,$filename,array( 'Content-Type' => 'application/pdf', )); 前端: downloadPag...

mysql设计表结构数据类型的选择

选择合适的数据类型 在使用MySQL创建数据表的时候会遇到一个问题,如何为字段选择合适的数据类型.比如创建一个员工信息表,每个字段都可以用很多种类型来定义, int,char,float等等. char和varchar char和varchar都是用来存储字符串类型的数据,但是他们保存和检索的方式不一样.char属于固定长度的字符类型,二varchar属于...