6、进阶之Jxls2的动态表格
Jxls2admin 发布于:2018-04-04 15:05:04
阅读:loading
本章节将在导出逻辑中演示报表动态列的实现场景。本示例涉及的jxsl:grid的表达式函数,需要自行另外掌握。前文中在Each数据循环的示例中是有用到一个横向循环的实现,我们把表格的标题作为第一条数据,使用jxsl:if来做首行标题的样式设置同样可以实现一个报表的动态列。实际上在jxls1.0的实现中我们也可以尝试使用它的横向循环来实现动态列,有个比较扯淡的实现是给模板来个30列的固定数据,在数据填充完成后使用Poi将超过的列在删除掉。
参考代码
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.Arrays;
import java.util.List;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
/**
* 简单表格--动态列的数据以及列的字段类型
* 感觉设置的格式没啥用
* @author chendd
*/
public class SimpleGridJxls {
public static void main(String[] args) throws Exception {
//构造集合数据
List<List<Object>> dataList = new ArrayList<List<Object>>();
List<Object> data1 = new ArrayList<Object>();
data1.add("chendd");data1.add("男");data1.add(25);
dataList.add(data1);
List<Object> data2 = new ArrayList<Object>();
data2.add("jiangjj");data2.add("男");data2.add(26);
dataList.add(data2);
List<Object> data3 = new ArrayList<Object>();
data3.add("zengxr");data3.add("男");data3.add(27);
dataList.add(data3);
//载入模板
InputStream is = SimpleGridJxls.class.getClass().getResourceAsStream("/cn/chendd/examples/templates/simpleGrid.xls");
Context context = new Context();
context.putVar("headers", Arrays.asList("姓名" , "性别" , "年龄"));
context.putVar("dataList", dataList);
OutputStream os = new FileOutputStream(new File("d:\\test\\out_simpleGrid.xls"));
//指定Sheet文件解析
JxlsHelper.getInstance().processTemplate(is, os, context);
os.flush();
os.close();
is.close();
}
}
代码说明
上述代码中我们可以看出由后台设置了 “dataList”的集合集合数据结构,其中每一条数据都是一个小的集合,注意标题headers处的Arrays.asList对象是一个Array$ArrayList类,非java.util.ArrayList类。
模板介绍
模板说明
上述2个模板图片中实际是同一个模板,在“浅浅”实践过程中发现首行出现了空行,标题数据显示在第二行(印象中是这样),官方提供的示例中A1格子是有一个主标题内容区域的,这里没有给出来也是为了复现这一情况的问题,给出的解决方案出来官网的办法外我们也可以再模板中将A1行隐藏起来。
运行示例
运行说明
示例模板中使用了formatCells参数设置的单元格格式,右键—单元格属性中的样式类型并非是设置的数字类型,还是常规类型,所以我感觉可能是设置没有生效还是别的什么原因。
相关下载
本示例代码会在后文中提供。
点赞