6、进阶之Jxls2的动态表格

Jxls2
placeholder image
admin 发布于: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类。

模板介绍

image.png


image.png

 

模板说明

上述2个模板图片中实际是同一个模板,在“浅浅”实践过程中发现首行出现了空行,标题数据显示在第二行(印象中是这样),官方提供的示例中A1格子是有一个主标题内容区域的,这里没有给出来也是为了复现这一情况的问题,给出的解决方案出来官网的办法外我们也可以再模板中将A1行隐藏起来。

运行示例

image.png

运行说明

示例模板中使用了formatCells参数设置的单元格格式,右键单元格属性中的样式类型并非是设置的数字类型,还是常规类型,所以我感觉可能是设置没有生效还是别的什么原因。

相关下载

out_simpleGrid.xls

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

 点赞


 发表评论

当前回复:作者

 评论列表


留言区