HTML 转 excel 工具包 Html2Excel

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;
      }

       

的码云指数为
超过 的项目
加载中

评论(10)

魔力猫
魔力猫
请问JDK7的情况下,如何引用老版本?
惟心 软件作者

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

支持造轮子!
👍谢谢支持!
惟心 软件作者

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

使用html来生成excel的思路很新颖,特别的还支持beetl模板引擎,赞~
支持国产😝
惟心 软件作者

引用来自“robortly”的评论

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

引用来自“robortly”的评论

感觉又是个重复轮子了。 Microsoft.Office.Excel 下的.net库很多这种转换方法。
搞清楚,这个是java平台的,不是.net平台的
独孤晓林
支持造轮子!
ManderSF
ManderSF
我现在要的是 导入excel 生成html 有这功能么 ?
robortly
robortly
感觉又是个重复轮子了。 Microsoft.Office.Excel 下的.net库很多这种转换方法。
你个大胖子
你个大胖子
使用html来生成excel的思路很新颖,特别的还支持beetl模板引擎,赞~

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

MyExcel,是一个集导入、导出、加密Excel等多项功能的工具包。 MyExcel是由Html2Excel更名而来,2.1.0版本及后续版本不再只提供导出功能,已全面覆盖Excel的导入、导出、加密等多项功能。 My...

03/24 10:10

Html2excel 1.4.1 发布,Html 转 Excel 工具包

Html2excel,Java 简单列表/复杂Excel导出新方式! Html2excel,是一个可直接使用Html文件,或者使用内置的 Freemarker、Groovy、Beetl 等模板引擎 Excel 构建器生成的 Html 文件,以 Html 文...

02/23 13:39

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

Html2excel,是一个可直接使用Html文件,或者使用内置的Freemarker、Groovy、Beetl等模板引擎Excel构建器生成的Html文件,以Html文件中的Table作为Excel模板来生成任意复杂布局的Excel的工具...

02/13 10:54

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

Html2excel,是一个借助Freemarker、Beetl、Groovy Template等模板引擎生成的Html table模板为媒介来生成任意复杂布局的Excel的工具包,支持.xls、.xlsx格式,支持对背景色、边框、字体等进行...

01/09 14:02

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

Html2excel,是一个以Html table 模板为媒介来生成任意复杂布局的Excel的工具包,支持.xls、.xlsx格式,支持对背景色、边框、字体等进行个性化设置,支持合并单元格。 本次发布更新点如下: ...

2018/12/30 12:01

Html2excel 1.2.4版本发布

Html2excel,是一个转换HTML表格为Excel的工具包,采用解析Html table的方式构建任意复杂的Excel,支持.xls、.xlsx格式,支持对背景色、边框、字体等进行个性化设置,支持合并单元格。 项目地...

2018/12/24 08:55

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

暂无博客

返回顶部
顶部