• 临汾市地病办举办第25个“防治碘缺乏病日”宣传活动 2019-07-17
  • 荷小镇为蝙蝠设红光路灯 居民抗议 2019-07-17
  • 香港支付方式日渐丰富 支付工具已不是“痛点” 2019-07-16
  • 6.27冰与火探戈乐团现场大舞会 2019-07-16
  • 广西:开放发展迈出新步伐(在习近平新时代中国特色社会主义思想指引下——新时代新作为新篇章) 2019-07-14
  • 《国家人文历史》2018年第4期封面及目录 2019-07-14
  • 企业服务行业跨越式发展 2018年神州顺利办聚焦企业人、财、物 2019-07-12
  • 宪法修正案专题记者会 2019-07-10
  • 西藏:持续推进治沙造林工作 筑牢生态安全屏障 2019-07-10
  • 国家新能源补贴新政实施 续航低于150公里车型停止补贴 2019-07-05
  • 鹤舞凌霄飞先进飞机,驾驶技术只占不到3成 2019-07-05
  • 从稳中向好发展态势看我国经济良好前景 2019-06-28
  • 天路文章中国国家地理网 2019-06-28
  • 屈原作为一个浪漫诗人的确才华横溢,值得称道,但是他反对统一就得批评。是吧小作? 2019-06-27
  • 毛主席是最懂经济的人,尤其是中国经济 2019-06-22
  • 浙江省快乐12走势图表

     找回密码
     立即注册

    QQ登录

    只需一步,快速开始

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

    浙江十一选5: java百万级别excel导出(easyExcel,阿里出品,超赞)

    [复制链接]

    浙江省快乐12走势图表 www.at929.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号|小黑屋|联系客服|金币冲值|浙江省快乐12走势图表

    GMT+8, 2019-7-24 03:59 , Processed in 0.117187 second(s), 29 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 浙江省快乐12走势图表 返回列表
  • 临汾市地病办举办第25个“防治碘缺乏病日”宣传活动 2019-07-17
  • 荷小镇为蝙蝠设红光路灯 居民抗议 2019-07-17
  • 香港支付方式日渐丰富 支付工具已不是“痛点” 2019-07-16
  • 6.27冰与火探戈乐团现场大舞会 2019-07-16
  • 广西:开放发展迈出新步伐(在习近平新时代中国特色社会主义思想指引下——新时代新作为新篇章) 2019-07-14
  • 《国家人文历史》2018年第4期封面及目录 2019-07-14
  • 企业服务行业跨越式发展 2018年神州顺利办聚焦企业人、财、物 2019-07-12
  • 宪法修正案专题记者会 2019-07-10
  • 西藏:持续推进治沙造林工作 筑牢生态安全屏障 2019-07-10
  • 国家新能源补贴新政实施 续航低于150公里车型停止补贴 2019-07-05
  • 鹤舞凌霄飞先进飞机,驾驶技术只占不到3成 2019-07-05
  • 从稳中向好发展态势看我国经济良好前景 2019-06-28
  • 天路文章中国国家地理网 2019-06-28
  • 屈原作为一个浪漫诗人的确才华横溢,值得称道,但是他反对统一就得批评。是吧小作? 2019-06-27
  • 毛主席是最懂经济的人,尤其是中国经济 2019-06-22
  • 中国福利彩票合买 31选7开奖公告 深圳免费六合图库 网上五分彩是假的吗 大乐透14074 江西快三遗漏数据查询 斯诺克世锦赛2019半决赛 体彩顶呱刮20倍现金 南粤36选7中五个号码 上海福利彩票投注站申请 浙江七乐彩走势图 德甲积分吧 重庆百变王牌直播开奖结果 河北11选5开奖直播现场 湖北快三怎么玩稳赚