7、进阶之Jxls2的数据分组

本文介绍如何使用jXLS框架实现数据分组显示,通过示例代码展示了如何构造集合数据并将其分组,同时提供了模板参考和运行示例。

http://chendd.cn/information/viewInformation/other/230.a

 

本章节将在导出逻辑中演示按照某一属性进行分组显示的场景。本示例涉及的jxls:each的表达式函数中的group属性,需要自行另外掌握。前文中在Each数据循环的示例中我们对each数据循环已经有点点了解了,就是在其基础上使用了一下groupBy和groupOrder属性并且将数据循环换成嵌套循环。实际上如果需要实现这一分组显示效果直接从后台构造好对应结构的数据即可,比如后台返回一个Map<String,List<User>>>格式的结构,我们对其循环即可实现同样的效果。

Java代码参考为:

package cn.chendd.examples;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
 
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
 
import cn.chendd.examples.vo.User;
 
/**
 * 简单的数据分组显示
 */
public class SimpleGroupJxls {
 
   public static void main(String[] args) throws Exception {
      //构造集合数据
      List<User> dataList = new ArrayList<User>();
      dataList.add(new User("zhangchunhua" , "女" , 120D));
      dataList.add(new User("zhouyu" , "男" , 100D));
      dataList.add(new User("sunce" , "男" , 110D));
      dataList.add(new User("machao" , "男" , 130D));
      dataList.add(new User("caifuren" , "女" , 120D));
      dataList.add(new User("zuoci" , "保密" , 150D));
      //载入模板
      InputStream is = SimpleGroupJxls.class.getClass().getResourceAsStream("/cn/chendd/examples/templates/simpleGroup.xls");
      Context context = new Context();
      context.putVar("dataList", dataList);
      OutputStream os = new FileOutputStream(new File("d:\\test\\out_simpleGroup.xls"));
      //指定Sheet文件解析
      JxlsHelper.getInstance().processTemplate(is, os, context);
      os.flush();
      os.close();
      is.close();
   }
 
}
 
package cn.chendd.examples.vo;
 
public class User {
 
   private String name;
   private String sex;
   private Double payment;
  
   private Integer mergerRows;
  
   public User() {
      super();
   }
   public User(String name, String sex, Double payment) {
  
      super();
      this.name = name;
      this.sex = sex;
      this.payment = payment;
   }
  
   public User(String name, String sex, Double payment , Integer mergerRows) {
     
      super();
      this.name = name;
      this.sex = sex;
      this.payment = payment;
      this.mergerRows = mergerRows;
   }
   //省略getter和setter
  
}

代码说明

上述代码中我们可以看出由后台设置了 “dataList”的集合对象数据结构,其中每条明细数据属性都有name、sex、payment属性,mergerRows属性暂时先忽略后文使用的,在此基础的数据上,我们将使用按sex性别就行分组显示数据。

模板参考为:

blob.png

blob.png

blob.png

模板说明

上述3个模板图片中第一个图片没什么新颖的东西,只是为给出源数据展示,第二个图片是分组的模板,第三个图片是分组时带统计汇总的模板。其中groupBy属性表示集合数据中将要用来分组的,groupOrder是分组显示的属性中用于排序先后的。

运行示例为:

blob.png

blob.png

blob.png

运行说明

分组示例包括了两个,分别是按性别sex进行分组,貌似这个排序有问题,nv应该在nan后面才对,不过这不是重点,其中第三个图中每块列表还有包括汇总的的计算和所有分组的总计实现。

相关下载

icon_txt.gifout_simpleGroup.xls

本示例代码会在后文中提供。

转载于:https://my.oschina.net/haiyangyiba/blog/2246033

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值