JXLS 2.4.0系列教程(二)——循环导出一个链表的数据

请务必先看上一篇文章,本文在上一篇文章的代码基础上修改而成。

JXLS 2.4.0系列教程(一)——最简单的模板导出

上一篇文章我们介绍了JXLS和模板导出最简单的应用,现在我们要更进一步,介绍在模板中循环导出链表中的数据,在日常开发中,循环导出应该才是最常用的功能吧!

首先,我们要建立一个类模拟javabean对象。我们定义一个person类,里面有id,name和age。

public class Person {
    String id;
    String name;
    Integer age;
    public Person(String id, String name, Integer age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public Person() {
    }

    /** 以下省略了对应的get/set方法,请自行补齐 */
}

然后我们修改main 方法,大体上和上一篇文章是一致的,只是模拟了从数据库取出javabean的过程,将取出的javabean对象仿佛model中,然后传给JxlsUtils。

public class TestMain {
    public static void main(String[] args) throws Exception {
        // 模板位置,输出流
        String templatePath = "E:/template2.xls";
        OutputStream os = new FileOutputStream("E:/out.xls");

        // 一个装有对象数据的链表
        List<Person> persons = new ArrayList<Person>();
        Person p1 = new Person("001", "张三", 18);
        Person p2 = new Person("002", "李四", 19);
        Person p3 = new Person("003", "王五", 20);
        persons.add(p1);
        persons.add(p2);
        persons.add(p3);

        Map<String, Object> model = new HashMap<String, Object>();
        model.put("person", persons);    // 把链表放进model中

        JxlsUtils.exportExcel(templatePath, os, model);
        os.close();
        System.out.println("完成");
    }
}

接下来我们设计模板:

A1单元格(A1到C1合并单元格,名字还是A1)中的注释:jx:area(lastCell="D4"),不用多讲划定模板的区域范围。依照上文讲的避免bug的原因,我们依然将区域范围设置成比模板内容至少大一圈。需要说明的是注释必须在左上角的A1中,但是可以在和A1合并后的单元格中。

A3单元格的注释:jx:each(items="person" var="p" lastCell="C3"):

jx:each()  这是一个遍历注释,默认向下增加一行。官网写可以横向遍历(增加direction 参数),我没有试过。

Items= 从java代码中传入的model的键值对中取出键名为“person”的对象,这个对象可以是集合,一般是链表。

Var= 每一条记录的变量名,命名为p。

lastCell= 遍历数据在模板中最后一个单元格的位置。

然后在遍历的区域内写上${ } 表达式,以var中定义的变量名 . 传进来的对象属性为构成。

然后保存模板,执行java代码,就能看到下图的结果了。

我们再来测试下复杂一点的模板呢?

遍历的模板有两行,而且开头一列为合并的单元格,遍历模板第二行为有底纹的单元格,看看整个表格生成后会不会崩掉?我试过几个模板导出插件,很多都是单行遍历模板没问题,一旦出现多行数据和带有合并的单元格整个模板就会崩掉。

没毛病,完美。

最后说一点:如果lastCell的参数是一个合并后的单元格,你不知道这个合并后的单元格名字是什么,那就用鼠标点一下该单元格,excel左上角会显示这个合并单元格的名称的,就写这个名字就行。

时间: 2024-10-11 04:51:01

JXLS 2.4.0系列教程(二)——循环导出一个链表的数据的相关文章

JXLS 2.4.0系列教程(三)——嵌套循环是怎么做到的

注:本文代码在第一篇文章基础上修改而成,请务必先阅读第一篇文章. http://www.cnblogs.com/foxlee1024/p/7616987.html 本文也不会过多的讲解模板中遍历表达式的写法和说明,请先阅读第二篇文章. http://www.cnblogs.com/foxlee1024/p/7617120.html 原本第三篇文章我打算写sheet分页的实现的,后来发现难度比第四篇循环嵌套复杂一点点,我们本着循序渐进的原则,所以先讲讲怎么实现循环嵌套. 说明是嵌套循环?说白了就是

Enterprise Library 5.0 系列教程

1. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (初级) 2. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (高级) 3. Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级) 4. Microsoft Enterpr

CRL快速开发框架系列教程二(基于Lambda表达式查询)

本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框架系列教程四(删除数据) CRL快速开发框架系列教程五(使用缓存) CRL快速开发框架系列教程六(分布式缓存解决方案) CRL快速开发框架系列教程七(使用事务) CRL快速开发框架系列教程八(使用CRL.Package) CRL快速开发框架系列教程九(导入/导出数据) CRL快速开发框架系列教程十(

Shell脚本系列教程二: 开始Shell编程

Shell脚本系列教程二: 开始Shell编程 2.1 如何写shell script? (1) 最常用的是使用vi或者mcedit来编写shell脚本, 但是你也可以使用任何你喜欢的编辑器; (2) 脚本写好之后, 要给脚本设置可执行权限: 语法为: chmod  [option]  mode  script-name $ chmod +x script-name # 对所有用户(a, 默认) $ chmod 775 script-name 这里, 775这3个数字分别表示此文件对于用户(u)

C#微信公众号开发系列教程二(新手接入指南)

http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微

[译]JavaFX 2.0+系列教程-使用内置的布局面板(4)-垂直盒子(VBox)

[译]JavaFX 2.0+系列教程-使用内置的布局面板(4)-垂直盒子(VBox) 垂直盒子 VBox 和水平盒子 HBox 很类似,只是其包含的节点是在单列中进行排列.图 1-4 显示了一个VBox的示例. 图 1-4 VBox示例 内边距(Padding)属性可以设置节点到VBox边缘的空隙.空间(Spacing)属性可以设置节点之间的间隙.边缘(Margin)属性可以为每个节点增加额外的环绕空间. 代码片段 例 1-3 创建了一个VBox,其中包含了一系列的选项. 例 1-3 创建VBo

[译]JavaFX 2.0+系列教程-使用内置的布局面板(3)-水平盒子(HBox)

[译]JavaFX 2.0+系列教程-使用内置的布局面板(3)-水平盒子(HBox) 水平盒子 HBox 为多个节点排列在一行中提供了一个简单的方法. 图 1-2 是HBox的一个示例. 图 1-2 HBox示例 内边距(Padding)属性可以设置节点到HBox边缘的空隙.空间(Spacing)属性可以设置节点之间的间隙.样式(Style)属性可以设置背景颜色. 代码片段 例 1-2 创建了一个HBox,实现了一个工具栏(ToolBar)的效果,其中包含了两个按钮. 例 1-2 创建HBox

[译]JavaFX 2.0+系列教程-使用布局(1)

JavaFX 2.0+系列教程-使用布局(1) 这个系列的教程主要是介绍如何在JavaFX应用程序中使用布局面板来创建用户界面. 主要包括以下3个主题: 使用内置的布局面板 - 介绍内置的布局面板,以及为每个面板提供简单的示例. 设置节点大小和对齐的技巧 - 提供了为节点覆盖默认大小和位置的示例. 使用CSS来修饰布局面板 - 介绍如何使用CSS来自定义布局面板. [译]JavaFX 2.0+系列教程-使用布局(1),布布扣,bubuko.com

[译]JavaFX 2.0+系列教程-使用内置的布局面板(2)-边框面板(BorderPane)

[译]JavaFX 2.0+系列教程-使用内置的布局面板(2)-边框面板(BorderPane) 边框面板 BorderPane 将面板划分为5个区域来放置界面元素:上.下.左.右.中. 图 1-1 显示了边框面板的布局示意图.每个区域的大小是没有限制的.在你使用边框面板时,如果不需要某个区域,你只要不为该区域设置内容,该区域则不会被分配显示空间,自然也就不会显示. 图 1-1 边框面板布局示意图 边框面板是我们经常见到的一个非常经典的布局效果:上面是菜单栏和工具栏,下面是状态栏,左边是导航面板