java jxls 合并列行,12、进阶之Jxls2的单元格合并

本章节将在导出逻辑中演示使用Jxls2时在模板实现单元格合并的效果。实际上官网上提供的单元格合并并非为我们所需要的实际效果,而是使用循环嵌套的方式来进行数据展示而已,单元格并未实现合并。之前在Jxls1的时候也都是使用它生产报表Excel文件,再使用Poi二次去实现单元格合并的逻辑。经过最后的自定义函数分析后,我觉得在简单的报表实现中,我们可以使用它的自定义函数功能实现单元格的合并效果,为了写的简单在构造数据的时候我直接将数据生成与单元格合并实现一致的结构。

Java代码参考为:

packagecn.chendd.examples;

importjava.io.File;

importjava.io.FileOutputStream;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importorg.jxls.area.Area;

importorg.jxls.builder.AreaBuilder;

importorg.jxls.builder.xls.XlsCommentAreaBuilder;

importorg.jxls.common.CellRef;

importorg.jxls.common.Context;

importorg.jxls.expression.JexlExpressionEvaluator;

importorg.jxls.transform.Transformer;

importorg.jxls.transform.poi.WritableCellValue;

importorg.jxls.util.TransformerFactory;

importcn.chendd.examples.custom.functions.MergeCellValue;

importcn.chendd.examples.vo.User;

/**

*简单横向单元格合并

*/

public classSimpleMergeJxls {

public static voidmain(String[] args)throwsException {

//模板文件

InputStream is = SimpleCustomFunctionJxls.class.getClass().getResourceAsStream("/cn/chendd/examples/templates/simpleMergeCell.xls");

Context context =newContext();

//设置绑定集合

List dataList =newArrayList();

dataList.add(newUser("yuji","保密", 120D , 0));

dataList.add(newUser("zhangchunhua","女", 120D , 0));

dataList.add(newUser("caifuren","女", 120D , 1));

dataList.add(newUser("zhouyu","男", 100D , 0));

dataList.add(newUser("sunce","男", 110D , 0));

dataList.add(newUser("machao","男", 130D , 2));

dataList.add(newUser("zuoci","保密", 150D , 0));

context.putVar("dataList", dataList);

Map myFunction =newHashMap();

myFunction.put("mg",newSimpleMergeJxls());

OutputStream os =newFileOutputStream(newFile("d:\\test\\out_simpleMergeCell.xls"));

Transformer trans = TransformerFactory.createTransformer(is, os);

JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) trans.getTransformationConfig().getExpressionEvaluator();

evaluator.getJexlEngine().setFunctions(myFunction);

//载入模板、处理导出

AreaBuilder areaBuilder =newXlsCommentAreaBuilder(trans);

List areaList = areaBuilder.build();

areaList.get(0).applyAt(newCellRef("简单单元格合并!A1"), context);

trans.write();

//    JxlsHelper.getInstance().processTemplate(is, os, context);

//释放资源

os.flush();

os.close();

is.close();

}

//单元格合并

publicWritableCellValue mergeCell(String value , Integer mergerRows) {

return newMergeCellValue(value , mergerRows);

}

}

代码说明

代码中向模板中输出了用户信息的集合数据,其中用户的性别数据中有重复项,mg为自定义函数的前缀,mergerCell为单元格合并的函数,value为当前格子的值,mergerRows为后台填充数据时向后扩展的行数。

模板参考为:

1522828248849012451.png.image

模板说明

模板中B列为用户Sex属性的循环合并项,其中最终实现是将这些格子转换为Poi的Cell对象,并由Sheet对象根据mergerRows的值去进行动态效果合并的。

运行示例为:

1522828239520065538.png.image

运行说明

示例显示了使用自定义函数实现单元格合并的效果。注意了这里的实现简单是因为在构造数据时已经将数据转换为与自定义函数解析一致的结构逻辑了,真正复杂的在转换数据结构上,并且如果需要实现多列合并时这里的代码肯定就不能行了,抛玉引砖。

相关下载

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部