Html2Excel 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Html2Excel 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Html2Excel 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Html2Excel 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Html2Excel 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 Apache
开发语言 Java
操作系统 跨平台
软件类型 开源软件
所属分类 其他
开源组织
地区 国产
投 递 者 惟心
适用人群 未知
收录时间 2018-12-12

软件简介

Html2excel,是一个可直接使用Html文件,或者使用内置的Freemarker、Groovy、Beetl等模板引擎Excel构建器生成的Html文件,以Html文件中的Table作为Excel模板来生成任意复杂布局的Excel的工具包,支持.xls、.xlsx格式,支持对背景色、边框、字体等进行个性化设置,支持合并单元格。

优点 | Advantages

  • 可生成任意复杂表格:本工具使用迭代单元格方式进行excel绘制,可生成任意复杂度excel,自适应宽度、高度;

  • 零学习成本:使用html作为模板,学习成本几乎为零;

  • 支持常用背景色、边框、字体等样式设置:具体参见文档-Style-support(样式支持)部分;

  • 支持.XLS、.XLSX:支持生成.xls、.xlsx后缀的excel;

  • 支持低内存SXSSF模式:支持低内存的SXSSF模式,可利用极低的内存生成.xlsx;

  • 支持生产者消费者模式导出:支持生产者消费者模式导出,配合SXSSF模式实现真正意义上海量数据导出;

  • 支持多种模板引擎:已内置Freemarker、Groovy、Beetl等常用模板引擎Excel构建器(详情参见文档Getting started),默认内置Beetl模板引擎(推荐引擎,Beetl文档);

  • 提供默认Excel构建器,直接输出简单Excel:无需编写任何html,已内置默认模板,可直接根据POJO数据列表输出;

  • 支持一次生成多sheet:以table作为sheet单元,支持一份excel文档中多sheet导出;

其他诸如API接口、异常说明、常见问题(性能等)等请参见具体文档:

https://github.com/liaochong/html2excel/wiki

示例 | Example

  1. 已存在html文件,使用这种方式时,html文件不局限于放在项目的classpath下

    // get html file
    File htmlFile = new File("/Users/liaochong/Downloads/example.html");
    
    // read the html file and use default excel style to create excel
    Workbook workbook = HtmlToExcelFactory.readHtml(htmlFile).useDefaultStyle().build();
    
    // this is a example,you can write the workbook to any valid outputstream
    OutputStream writer = new FileOutputStream(new File("/Users/liaochong/Downloads/excel.xlsx"));
    workbook.write(writer);

     

  2. 使用freemarker等模板引擎,具体请参照项目中的example

    /**
    * 使用普通方式构建excel
    *
    * @param response response
    */
    @GetMapping("/freemarker/build")
    public void build(HttpServletResponse response) {
          ExcelBuilder excelBuilder = new FreemarkerExcelBuilder();
          Workbook workbook = excelBuilder.template("/templates/freemarker_template.ftl").build(new HashMap<>());
    
          response.setCharacterEncoding(CharEncoding.UTF_8);
          response.addHeader("Content-Disposition", "attachment;filename=" + new String("freemarker_excel.xlsx".getBytes()));
          try {
             workbook.write(response.getOutputStream());
          } catch (IOException e) {
             e.printStackTrace();
       }
    }
    
    /**
    * 使用默认样式构建excel
    *
    * @param response response
    */
    @GetMapping("/freemarker/default_style/build")
    public void buildWithDefaultStyle(HttpServletResponse response) {
          ExcelBuilder excelBuilder = new FreemarkerExcelBuilder();
          Workbook workbook = excelBuilder.template("/templates/freemarker_template.ftl").useDefaultStyle().build(new HashMap<>());
    
          response.setCharacterEncoding(CharEncoding.UTF_8);
          response.addHeader("Content-Disposition", "attachment;filename=" + new String("freemarker_excel.xlsx".getBytes()));
          try {
             workbook.write(response.getOutputStream());
          } catch (IOException e) {
             e.printStackTrace();
          }
    }

     

  3. 默认模板引擎使用

    1. 注解方式

      ListdataList = new ArrayList<>();
      for (int i = 0; i < 500000; i++) {
           Child child = new Child();
           child.setName("liaochong");
           child.setAge(i);
           child.setSex(1);
           child.setIndex(i);
           dataList.add(child);
      }
      Workbook workbook = DefaultExcelBuilder.getInstance().build(dataList);
      
      @ExcelTable(workbookType = WorkbookType.SXLSX, rowAccessWindowSize = 100, sheetName = "测试")
      public static class Child extends Parent {
           @ExcelColumn(order = 3, title = "姓名")
           private String name;
      
           @ExcludeColumn
           private Integer age;
      
           public String getName() {
               return name;
           }
      
           public void setName(String name) {
               this.name = name;
           }
      
           public Integer getAge() {
               return age;
           }
      
           public void setAge(Integer age) {
               this.age = age;
           }
      }
      
      public static class Parent {
      
           @ExcelColumn(title = "性别")
           private Integer sex;
      
           @ExcelColumn(order = -1, title = "index")
           private Integer index;
      
           public Integer getSex() {
                return sex;
           }
      
           public void setSex(Integer sex) {
                this.sex = sex;
           }
      
           public Integer getIndex() {
                return index;
           }
      
           public void setIndex(Integer index) {
                this.index = index;
           }
      }

       

    2. 自定义方式

      // title
      Listtitles = new ArrayList<>();
      titles.add("姓名");
      titles.add("年龄");
      
      // field display order
      Listorder = new ArrayList<>();
      order.add("name");
      order.add("age");
      
      // display data
      ListdataList = this.getData();
      
      Workbook workbook = DefaultExcelBuilder.getInstance()
                                          .sheetName("default example")
                                          .titles(titles)
                                          .fieldDisplayOrder(order)
                                          .build(dataList);
      
      private ListgetData(){
        TestDO testDO = new TestDO();
        testDO.setName("张三");
        TestDO testDO1 = new TestDO();
        testDO1.setName("李四");
      
        TestDO testDO2 = new TestDO();
        testDO2.setName("王五");
        testDO2.setAge(15);
        TestDO testDO3 = new TestDO();
        testDO3.setName("陈六");
        testDO3.setAge(25);
      
        ListdataList = new ArrayList<>();
        dataList.add(testDO);
        dataList.add(testDO1);
        dataList.add(testDO2);
        dataList.add(testDO3);
        
        return dataList;
      }

       

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (10)

加载中
请问JDK7的情况下,如何引用老版本?
2019/05/14 16:15
回复
举报
惟心软件作者

引用来自“独孤晓林”的评论

支持造轮子!
👍谢谢支持!
2018/12/24 09:32
回复
举报
惟心软件作者

引用来自“超载先生”的评论

使用html来生成excel的思路很新颖,特别的还支持beetl模板引擎,赞~
支持国产😝
2018/12/24 09:29
回复
举报
惟心软件作者

引用来自“robortly”的评论

感觉又是个重复轮子了。 Microsoft.Office.Excel 下的.net库很多这种转换方法。
亲,这是java平台哈,另外关于重复轮子的问题,个人觉得无论哪个平台,重复轮子的存在是必要的,因为重复造轮子能让开发者更深入了解软件的运行原理,从而为以后以新的思维方式造轮子铺垫,而且即使是重复造轮子,一般造出来的轮子也有各自不同的优点,对于普通使用者而言,只是有了更多的选择,不会有什么损失,何乐而不为呢?个人观点,如有不对,还请指正
2018/12/24 09:28
回复
举报
我也想要excel生成html的功能
2018/12/22 00:55
回复
举报

引用来自“robortly”的评论

感觉又是个重复轮子了。 Microsoft.Office.Excel 下的.net库很多这种转换方法。
搞清楚,这个是java平台的,不是.net平台的
2018/12/21 11:43
回复
举报
支持造轮子!
2018/12/21 10:35
回复
举报
我现在要的是 导入excel 生成html 有这功能么 ?
2018/12/21 10:34
回复
举报
感觉又是个重复轮子了。 Microsoft.Office.Excel 下的.net库很多这种转换方法。
2018/12/21 10:26
回复
举报
使用html来生成excel的思路很新颖,特别的还支持beetl模板引擎,赞~
2018/12/21 09:24
回复
举报
更多评论
发表了资讯
2019/03/24 11:14

Html2Excel 更名为 MyExcel,2.1.0 版本发布!

MyExcel,是一个集导入、导出、加密Excel等多项功能的工具包。 MyExcel是由Html2Excel更名而来,2.1.0版本及后续版本不再只提供导出功能,已全面覆盖Excel的导入、导出、加密等多项功能。 MyExcel的优势在于: 提供默认Excel构建器,直接输出简单Excel:无需编写任何模板,已提供简单API,可直接根据POJO数据列表输出 可生成任意复杂表格:本工具使用迭代单元格方式进行excel绘制,可生成任意复杂度excel; 支持常用背景色、边框...

14
145
发表了资讯
2019/02/23 17:52

Html2excel 1.4.1 发布,Html 转 Excel 工具包

Html2excel,Java 简单列表/复杂Excel导出新方式! Html2excel,是一个可直接使用Html文件,或者使用内置的 Freemarker、Groovy、Beetl 等模板引擎 Excel 构建器生成的 Html 文件,以 Html 文件中的 Table 作为 Excel 模板来生成任意复杂布局的Excel的工具包,支持 .xls、.xlsx 格式,支持对背景色、边框、字体等进行个性化设置,支持合并单元格。 同时默认集成了简单列表导出工具类 DefaultExcelBuilder/DefaultStreamExcelBu...

0
38
发表了资讯
2019/02/13 10:54

Html2excel 1.4.0 版本发布,支持生产者消费者模式导出!

Html2excel,是一个可直接使用Html文件,或者使用内置的Freemarker、Groovy、Beetl等模板引擎Excel构建器生成的Html文件,以Html文件中的Table作为Excel模板来生成任意复杂布局的Excel的工具包,支持.xls、.xlsx格式,支持对背景色、边框、字体等进行个性化设置,支持合并单元格。 其定位为主要用于生成复杂布局的Excel,复杂布局指的是包含多种不规则合并单元格、背景色、字体大小、斜体等。 本次更新是一个大版本更新,更新点...

4
60
发表了资讯
2019/01/09 14:02

Html2excel 1.3.1 版本发布,Html 转 Excel 工具包

Html2excel,是一个借助Freemarker、Beetl、Groovy Template等模板引擎生成的Html table模板为媒介来生成任意复杂布局的Excel的工具包,支持.xls、.xlsx格式,支持对背景色、边框、字体等进行个性化设置,支持合并单元格,其中复杂布局指的是包含多种不规则合并单元格、背景色、字体大小、斜体等。 本次发布修改点如下: 修复非首行单元格高度无法自适应问题; 修复默认Excel构建器(DefaultExcelBuilder)注解@ExcelTable中inc...

0
39
发表了资讯
2018/12/30 12:01

Html2excel 1.3.0 版本发布,重构 POI 写模块

Html2excel,是一个以Html table 模板为媒介来生成任意复杂布局的Excel的工具包,支持.xls、.xlsx格式,支持对背景色、边框、字体等进行个性化设置,支持合并单元格。 本次发布更新点如下: 对DefaultExcelBuilder进行增强,支持使用@ExcelTable、@ExcelColumn、@ExcludeColumn导出; 支持SXSSF模式,海量数据下导出无压力; 重构POI写模块,降低50+%内存占用,导出性能极速提升; 具体操作方式参见文档,文档地址:Html2excel文...

4
60
发表了资讯
2018/12/24 08:55

Html2excel 1.2.4版本发布

Html2excel,是一个转换HTML表格为Excel的工具包,采用解析Html table的方式构建任意复杂的Excel,支持.xls、.xlsx格式,支持对背景色、边框、字体等进行个性化设置,支持合并单元格。 项目地址:https://www.oschina.net/p/Html2Excel Github:https://github.com/liaochong/html2excel 1.2.4版本修改点如下: 修改默认Excel构建器-DefaultExcelBuilder获取对象属性值的方式; 完善默认模板的安全输出; 修改代码层次结构,是项目...

7
36
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2020/08/13 12:06

Springboot+Poi实现Excel的导入导出

目录 POI操作Excel EasyPOI操作Excel 解决不同浏览器导出excel中文名称乱码问题 使用POI将HTML Table导出Excel 代码:https://gitee.com/typ1805/springboot-master POI操作Excel 一、poi简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 1、HSSF:HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSS...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
10 评论
244 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部