• 图画书《一只特立独行的猪》用布艺风格讲故事 2019-05-23
  • 努力把各级党组织锻造得更加坚强有力——四论认真学习贯彻省委十二届四次全会精神 2019-05-22
  • 尼斯湖里有啥?新西兰学者欲探测“水怪DNA”揭秘 2019-04-30
  • 发现关中:苍鹭翩飞 铜川朱鹮野化放飞区的“原住民” 2019-04-01
  • 张涵予加盟《熟味3》跨国寻味 2019-04-01
  • 个税法修正案草案增反避税条款堵税收漏洞 2019-03-30
  • 商务部新闻发言人就美白宫6月18日声明发表谈话 2019-03-28
  • 珠江口虎门二桥主桥合龙 2019-03-22
  • 奥尼尔晒出自己修脚视频:该死,她不得不带个口罩 2019-03-15
  • 《在人间》第153期:南疆十日 2019-03-13
  • 立秋日 滇池上空出现七彩云霞 2019-03-13
  • 春运面孔:她们让回家的路更温暖 2019-03-03
  • 端午假期国内游客超8900万人次 全域旅游见成效 2019-03-03
  • 上海天天彩选4走势

     找回密码
     立即注册

    QQ登录

    只需一步,快速开始

    查看: 7062|回复: 20
    打印 上一主题 下一主题

    快乐彩害了多少人: java百万级别excel导出(easyExcel,阿里出品,超赞)

    [复制链接]

    上海天天彩选4走势 www.rkbqy.com 14

    主题

    55

    帖子

    32

    金币

    连长

    Rank: 7Rank: 7Rank: 7

    积分
    159

    新兵

    跳转到指定楼层
    楼主
    发表于 2018-11-6 00:46:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式




    1.为什么需要excel导出?

    导出功能在各个领域都被广泛的运用,当用户想把数据下载下来的时候,此时excel是一个不错的选择。

    2.如何选择合适的excel导出?

    选择的问题一般都比较纠结,选择了一个版本之后发现另外一个版本更适合,所以我们就应该选择一些我们相对较熟悉或者合适自己开发习惯的就行,没有需要纠结到底选择那个版本。

    3.easyexcel工具

    Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是很是的耗内存,poi有一套SAX模式的API可以一定水平的解决一些内存溢出的问题,但POI还是有一些缺陷,好比07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到KB级别,并且再大的excel不会呈现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单便利(此处引用gitHub)

    好了,空话不多说,直接进入主题,如何运用easyExcel进行excel处处。

    第一:引入jar包.

    gradle:

    compile("com.alibaba:easyexcel:1.0.4")

    maven:

    <dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>easyexcel</artifactId>

    <version>1.0.4</version>

    </dependency>

    核心代码:ExcelUtils.java

    package com.dctp.cloud.boss.util;

    import com.alibaba.excel.ExcelWriter;

    import com.alibaba.excel.metadata.BaseRowModel;

    import com.alibaba.excel.metadata.Sheet;

    import com.alibaba.excel.support.ExcelTypeEnum;

    import com.dctp.cloud.bo.BoUtil;

    import com.dctp.cloud.boss.bo.OTCTradeBo;

    import org.apache.poi.ss.formula.functions.T;

    import javax.servlet.ServletOutputStream;

    import javax.servlet.http.HttpServletResponse;

    import java.io.IOException;

    import java.net.URLEncoder;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import java.util.List;

    /**

    * @Description: excel操作工具类

    * @Author: yaomaoyang

    * @CreateDate: 2018/9/29 18:05

    * @UpdateUser: yaomaoyang

    * @UpdateDate: 2018/9/29 18:05

    * @UpdateRemark: 修改内容

    * @Version: 1.0

    */

    public class ExcelUtils {

    /**

    * 导出

    * @param list

    * @param response

    * @param clazz

    * @return

    */

    public static BoUtil export(List<? extends BaseRowModel> list, HttpServletResponse response, Class<? extends BaseRowModel> clazz) {

    BoUtil boUtil = BoUtil.getDefaultFalseBo();

    ServletOutputStream out = null;

    try {

    out = response.getOutputStream();

    } catch (IOException e) {

    e.printStackTrace();

    }

    ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);

    try {

    boUtil = BoUtil.getDefaultTrueBo();

    String fileName = new String(

    (new SimpleDateFormat("yyyy-MM-dd").format(new Date())).getBytes(), "UTF-8");

    Sheet sheet2 = new Sheet(2, 3,clazz, "sheet", null);

    writer.write(list, sheet2);

    //response.setContentType("multipart/form-data");

    response.setCharacterEncoding("utf-8");

    response.setContentType("application/vnd.ms-excel");

    response.setHeader("content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "utf-8"));

    //response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");

    out.flush();

    boUtil.setMsg("导出成功");

    } catch (Exception e) {

    e.printStackTrace();

    boUtil.setMsg("导出失败");

    return boUtil;

    } finally {

    writer.finish();

    try {

    out.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    return boUtil;

    }

    }

    }

    AdvertisingIndentBo.java

    package com.dctp.cloud.boss.bo;

    import java.math.BigDecimal;

    import com.alibaba.excel.annotation.ExcelProperty;

    import com.alibaba.excel.metadata.BaseRowModel;

    import lombok.AllArgsConstructor;

    import lombok.Data;

    import lombok.NoArgsConstructor;

    import lombok.experimental.Builder;

    @SuppressWarnings("deprecation")

    @Data

    @Builder

    @NoArgsConstructor

    @AllArgsConstructor

    public class AdvertisingIndentBo extends BaseRowModel {

    // 订单编号

    @ExcelProperty(value = {"广告编号"},index = 0)

    private String id;

    // 交易类型:1 买入 2卖出

    private Integer tradeType;

    @ExcelProperty(value = {"交易"},index = 1)

    //交易类型(导出时使用)

    private String tradeTypeStr;

    // 用户ID begin

    private Long userID;

    private Integer login;

    private String alaisName;

    @ExcelProperty(value = {"会员"},index = 2)

    private String realname;

    private String phone;

    private String email;

    // 用户信息 end

    // 资产ID

    private Long coinID;

    @ExcelProperty(value = {"资产名称"},index = 3)

    private String coinName;

    // 交易状态

    private Integer tradeState;

    //交易状态(导出时使用)

    @ExcelProperty(value = {"状态"},index = 4)

    private String tradeStateStr;

    // 取价类型

    private Integer priceType;

    // 取价类型(导出时使用)

    @ExcelProperty(value = {"取价类型"},index = 5)

    private String priceTypeStr;

    // 平台实时价格的百分比

    @ExcelProperty(value = {"溢价"},index = 6)

    private BigDecimal premium;

    // 交易单价

    @ExcelProperty(value = {"价格"},index = 7)

    private BigDecimal price;

    // 交易数量

    private BigDecimal cionNum;

    // 剩余数量

    private BigDecimal residueNum;

    // 交易最小金额

    @ExcelProperty(value = {"最小金额"},index = 8)

    private BigDecimal minPrice;

    // 交易最大金额

    @ExcelProperty(value = {"最大金额"},index = 9)

    private BigDecimal maxPrice;

    // 付款体例类型

    @ExcelProperty(value = {"付款类型"},index = 10)

    private String payType;

    // 付款期限30-120分钟之内

    @ExcelProperty(value = {"付款期限"},index = 11)

    private Integer payTime;

    // 建立时间

    @ExcelProperty(value = {"建立时间"},index = 12)

    private String createTime;

    // 交易密码

    private String password;

    /**

    * 建立人

    */

    private Long createBy;

    /**

    * 修改人

    */

    private Long updateBy;

    private String activeFlag;

    }

    controller:

    boUtil = ExcelUtils.export(list, response, AdvertisingIndentBo.class);

    list:LIst<AdvertisingIndentBo>:你需要处处的数据集合。

    BaseRowModel:为什么要继承BaseRowModel,因为他是基类。

    @ExcelProperty:对应excel中的表头。

    value:表头的名称

    index:排序

    总结

    以上就是esatExcel的excel导出,如果有什么疑问或者不足,欢迎巨匠的留言。

    更多内容回复查看:
    游客,如果您要查看本帖隐藏内容请回复
    C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

    5

    主题

    50

    帖子

    11

    金币

    连长

    Rank: 7Rank: 7Rank: 7

    积分
    135

    新兵

    沙发
    发表于 2018-11-6 00:47:06 | 只看该作者
    头条的代码功能不可啊
    C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

    16

    主题

    49

    帖子

    34

    金币

    连长

    Rank: 7Rank: 7Rank: 7

    积分
    129
    板凳
    发表于 2018-11-6 00:47:26 | 只看该作者
    Excel用C#就太便利了
    C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

    13

    主题

    60

    帖子

    35

    金币

    连长

    Rank: 7Rank: 7Rank: 7

    积分
    171

    新兵

    地板
    发表于 2018-11-6 00:47:34 | 只看该作者
    不太理解为什么有这种业务需求。你一顿华丽操作把几百万条excel导出来了,可是excel其实不克不及打开这么大的文件啊。导成csv欠好吗?
    C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

    9

    主题

    40

    帖子

    20

    金币

    连长

    Rank: 7Rank: 7Rank: 7

    积分
    87

    新兵

    5#
    发表于 2018-11-6 00:48:14 | 只看该作者
    如果你把excel的有些列隐藏了 easyexcel会读取错乱
    C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

    10

    主题

    45

    帖子

    21

    金币

    连长

    Rank: 7Rank: 7Rank: 7

    积分
    93
    6#
    发表于 2018-11-6 00:49:01 | 只看该作者
    百万级别还是建议用csv格式,直接写文本。
    C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

    8

    主题

    82

    帖子

    28

    金币

    团长

    Rank: 10Rank: 10Rank: 10

    积分
    249

    新兵社区QQ达人K歌之王论坛帅哥小熊青玉草论坛精英爱心

    7#
    发表于 2018-11-6 00:49:34 | 只看该作者
    对读Excel文件支持的如何,内存消耗大吗
    C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

    6

    主题

    35

    帖子

    13

    金币

    连长

    Rank: 7Rank: 7Rank: 7

    积分
    87
    8#
    发表于 2018-11-6 00:50:27 | 只看该作者
    属下,实在不睬解为什么要导出百万级excel,耍吗?
    C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

    14

    主题

    50

    帖子

    29

    金币

    连长

    Rank: 7Rank: 7Rank: 7

    积分
    126
    9#
    发表于 2018-11-6 00:50:32 | 只看该作者
    支持中文格式么
    C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

    10

    主题

    53

    帖子

    23

    金币

    连长

    Rank: 7Rank: 7Rank: 7

    积分
    153
    10#
    发表于 2018-11-6 00:51:09 | 只看该作者
    导出csv文件速度最快,excrl打开可以直接编辑,便利的很
    C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码
    *滑动验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    VC中文网 - 豫ICP备14012807号|小黑屋|联系客服|金币冲值|上海天天彩选4走势

    GMT+8, 2019-5-26 13:08 , Processed in 0.117186 second(s), 29 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 上海天天彩选4走势 返回列表
  • 图画书《一只特立独行的猪》用布艺风格讲故事 2019-05-23
  • 努力把各级党组织锻造得更加坚强有力——四论认真学习贯彻省委十二届四次全会精神 2019-05-22
  • 尼斯湖里有啥?新西兰学者欲探测“水怪DNA”揭秘 2019-04-30
  • 发现关中:苍鹭翩飞 铜川朱鹮野化放飞区的“原住民” 2019-04-01
  • 张涵予加盟《熟味3》跨国寻味 2019-04-01
  • 个税法修正案草案增反避税条款堵税收漏洞 2019-03-30
  • 商务部新闻发言人就美白宫6月18日声明发表谈话 2019-03-28
  • 珠江口虎门二桥主桥合龙 2019-03-22
  • 奥尼尔晒出自己修脚视频:该死,她不得不带个口罩 2019-03-15
  • 《在人间》第153期:南疆十日 2019-03-13
  • 立秋日 滇池上空出现七彩云霞 2019-03-13
  • 春运面孔:她们让回家的路更温暖 2019-03-03
  • 端午假期国内游客超8900万人次 全域旅游见成效 2019-03-03