6、进阶之Jxls2的动态表格

该篇博客介绍了如何在Java应用中使用Jxls2库动态生成Excel表格,特别是处理动态列的情况。通过后台设置数据结构,利用jxsl:grid表达式函数,实现了表格标题作为第一条数据并设置首行标题样式。示例代码展示了如何处理数据集合,并指出在jxls1.0中可能的替代实现。模板设计时遇到了标题显示位置问题,博主提供了隐藏A1行的解决策略。运行示例中提到的单元格格式设置可能未生效。

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

本章节将在导出逻辑中演示报表动态列的实现场景。本示例涉及的jxsl:grid的表达式函数,需要自行另外掌握。前文中在Each数据循环的示例中是有用到一个横向循环的实现,我们把表格的标题作为第一条数据,使用jxsl:if来做首行标题的样式设置同样可以实现一个报表的动态列。实际上在jxls1.0的实现中我们也可以尝试使用它的横向循环来实现动态列,有个比较扯淡的实现是给模板来个30列的固定数据,在数据填充完成后使用Poi将超过的列在删除掉。

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.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类。

模板参考为:

blob.png

blob.png

 

模板说明

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

运行示例为:

blob.png

运行说明

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

相关下载

icon_txt.gifout_simpleGrid.xls

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值