关于jxls2.6.0的学习以及遇到的问题(八)
访问jxls官网:http://jxls.sourceforge.net/
官网中也有例子:https://bitbucket.org/leonate/jxls-demo/src/master/。
笔者会在最后一篇总结中将笔者的项目和Excel文件打包上传
合并行,官网给出的例子不同进行动态的合并,这里从网上找了一个
/**
* <p>合并单元格</p>
* jx:merge(
* lastCell="单元格"
* [, cols="合并的列数"]
* [, rows="合并的行数"]
* [, minCols="最小合并的列数"]
* [, minRows="最小合并的行数"]
* )
* @author Victor
* @date 2018年12月6日
*/
public class MergeCommand extends AbstractCommand{
private String cols; //合并的列数
private String rows; //合并的行数
private String minCols; //最小合并的列数
private String minRows; //最小合并的行数
private CellStyle cellStyle;//第一个单元格的样式
private Area area;
@Override
public String getName() {
return "merge";
}
@Override
public Command addArea(Area area) {
if (super.getAreaList().size() >= 1) {
throw new IllegalArgumentException("You can add only a single area to 'merge' command");
}
this.area = area;
return super.addArea(area);
}
@Override
public Size applyAt(CellRef cellRef, Context context) {
int rows = area.getSize().getHeight();
int cols = area.getSize().getWidth();
rows = Math.max(getVal(this.rows, context), rows);
cols = Math.max(getVal(this.cols, context), cols);
rows = Math.max(getVal(this.minRows, context), rows);
cols = Math.max(getVal(this.minCols, context), cols);
if(rows > 1 || cols > 1){
Transformer transformer = this.getTransformer();
if(transformer instanceof PoiTransformer){
poiMerge(cellRef, context, (PoiTransformer)transformer, rows, cols);
}else if(transformer instanceof JexcelTransformer){
jexcelMerge(cellRef, context, (JexcelTransformer)transformer, rows, cols);
}
}
area.applyAt(cellRef, context);
return new Size(cols, rows);
}
protected Size poiMerge(CellRef cellRef, Context context, PoiTransformer transformer, int rows, int cols){
Sheet sheet = transformer.getWorkbook().getSheet(cellRef.getSheetName());
CellRangeAddress region = new CellRangeAddress(
cellRef.getRow(),
cellRef.getRow() + rows - 1,
cellRef.getCol(),
cellRef.getCol() + cols - 1);
sheet.addMergedRegion(region);
//合并之后单元格样式会丢失,以下操作将合并后的单元格恢复成合并前第一个单元格的样式
area.applyAt(cellRef, context);
if(cellStyle == null){
PoiCellData cellData = (PoiCellData)transformer.getCellData(area.getStartCellRef());
if(cellData != null){
cellStyle = cellData.getCellStyle();
}
}
setRegionStyle(cellStyle, region, sheet);
return new Size(cols, rows);
}
protected Size jexcelMerge(CellRef cellRef, Context context, JexcelTransformer transformer, int rows, int cols){
try {
transformer.getWritableWorkbook().getSheet(cellRef.getSheetName())
.mergeCells(
cellRef.getRow(),
cellRef.getCol(),
cellRef.getRow() + rows - 1 ,
cellRef.getCol() + cols - 1);
area.applyAt(cellRef, context);
} catch (WriteException e) {
throw new IllegalArgumentException("合并单元格失败");
}
return new Size(cols, rows);
}
private static void setRegionStyle(CellStyle cs, CellRangeAddress region, Sheet sheet) {
for (int i = region.getFirstRow(); i <= region.getLastRow(); i++) {
Row row = sheet.getRow(i);
if (row == null) {
row = sheet.createRow(i);
}for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) {
Cell cell = row.getCell(j);
if (cell == null) {
cell = row.createCell(j);
}
if (cs == null){
cell.getCellStyle().setAlignment(HorizontalAlignment.CENTER);
cell.getCellStyle().setVerticalAlignment(VerticalAlignment.CENTER);
}else {
cell.setCellStyle(cs);
}
}
}
}
private int getVal(String expression, Context context){
if(StringUtils.isNotEmpty(expression)){
Object obj = getTransformationConfig().getExpressionEvaluator().evaluate(expression, context.toMap());
try {
return Integer.parseInt(obj.toString());
} catch (NumberFormatException e) {
throw new IllegalArgumentException("表达式:" + expression + " 解析失败");
}
}
return 0;
}
public String getCols() {
return cols;
}
public void setCols(String cols) {
this.cols = cols;
}
public String getRows() {
return rows;
}
public void setRows(String rows) {
this.rows = rows;
}
public String getMinCols() {
return minCols;
}
public void setMinCols(String minCols) {
this.minCols = minCols;
}
public String getMinRows() {
return minRows;
}
public void setMinRows(String minRows) {
this.minRows = minRows;
}
}
下面是笔者的代码
// 命令--merge
public static void merge() throws Exception {
InputStream is =
new FileInputStream("E:\\wrc\\jxls\\study\\mergeTeplate.xlsx");
OutputStream os = new FileOutputStream("E:\\wrc\\jxls\\study\\merge.xlsx");
XlsCommentAreaBuilder.addCommandMapping("merge", MergeCommand.class);
JxlsHelper jxlsHelper = JxlsHelper.getInstance();
Transformer transformer = jxlsHelper.createTransformer(is, os);
Context context = new Context();
List<Map<String,Object>> employees = new ArrayList<Map<String,Object>>();
List<Map<String,Object>> courses = new ArrayList<Map<String,Object>>();
Map<String,Object> hashMap = new HashMap<String,Object>();
hashMap.put("name","Elsa" );
hashMap.put("pay", 1500);
Map<String,Object> couse = new HashMap<String,Object>();
couse.put("name", "语文");
couse.put("core", 98);
courses.add(couse);
couse = new HashMap<String,Object>();
couse.put("name", "数学");
couse.put("core", 94);
courses.add(couse);
hashMap.put("courses", courses);
employees.add(hashMap);
courses = new ArrayList<Map<String,Object>>();
hashMap = new HashMap<String,Object>();
hashMap.put("name","Oleg" );
hashMap.put("pay", 2300);
couse = new HashMap<String,Object>();
couse.put("name", "语文");
couse.put("core", 98);
courses.add(couse);
hashMap.put("courses", courses);
employees.add(hashMap);
courses = new ArrayList<Map<String,Object>>();
hashMap = new HashMap<String,Object>();
hashMap.put("name","John" );
hashMap.put("pay", 3500);
couse = new HashMap<String,Object>();
couse.put("name", "语文");
couse.put("core", 98);
courses.add(couse);
couse = new HashMap<String,Object>();
couse.put("name", "语文");
couse.put("core", 98);
courses.add(couse);
couse = new HashMap<String,Object>();
couse.put("name", "语文");
couse.put("core", 98);
courses.add(couse);
hashMap.put("courses", courses);
employees.add(hashMap);
context.putVar("employees", employees);
jxlsHelper.setUseFastFormulaProcessor(false).processTemplate(context, transformer);
//JxlsUtils.exportExcel(is,os,context,true);
}
下面是笔者的Excel
关于jxls2.6.0的学习以及遇到的问题(八)相关推荐
- 《ANSYS 14.0超级学习手册》一第2章 高级应用的基石——APDL
本节书摘来自异步社区<ANSYS 14.0超级学习手册>一书中的第2章,作者 张建伟 , 白海波 , 李昕, 更多章节内容可以访问云栖社区"异步社区"公众号查看 第2章 ...
- 0基础学习数据分析必须掌握的技能有哪些?
现如今,我们处于一个互联网发展的时代,大大小小的企业对于数据分析相关岗位的需求逐渐增加,因为所有的企业都有数据,企业需要让数据分析师通过整理.分析企业数据总结出企业目前的发展现状,并且为企业做出下一步 ...
- 资源|2019 年 11 月最新《TensorFlow 2.0 深度学习算法实战》中文版教材免费开源(附随书代码+pdf)...
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送 2019 年 10 月,谷歌正式宣布,开源机器学习库 TensorFlow 2.0 现在 ...
- 《ANSYS 14.0超级学习手册》一第1章 绪 论
本节书摘来自异步社区<ANSYS 14.0超级学习手册>一书中的第1章,第1.1节,作者 张建伟 , 白海波 , 李昕, 更多章节内容可以访问云栖社区"异步社区"公众号 ...
- 从0开始学习GitHub系列之「Git 速成」
从0开始学习GitHub系列之「Git 速成」 糖果果| 2016-06-24 10:55 浏览量(32) 评论(0) 推荐(0) 数据 小编注:[从0开始学习 GitHub]是一个系 ...
- 从0开始学习GitHub系列之「认识并加入GitHub」
从0开始学习GitHub系列之「认识并加入GitHub」 糖果果| 2016-06-16 16:01 浏览量(245) 评论(0) 推荐(0) 数据 小编注:[从0开始学习 GitHu ...
- 从0开始学习GitHub系列之「向GitHub 提交代码」
DevStore首页 >文章 >文章详情 从0开始学习GitHub系列之「向GitHub 提交代码」 糖果果| 2016-06-15 10:57 浏览量(500) 评论(1) ...
- python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...
从0基础学习Python (Day19) 面向对象开发过程中的=>异常 什么是异常 当程序在运行过程中出现的一些错误,或者语法逻辑出现问题,解释器此时无法继续正常执行了,反而出现了一些错误的 ...
- 400页《TensorFlow 2.0 深度学习算法实战》中文版教材免费下载(附随书代码+pdf)...
Tensorflow自谷歌提出以来就成为最受欢迎的深度学习框架之一,到目前为止也已经被下载超过 4000 万次.其中TensorFlow2.0更是修复之前非常多的不人性的特性,备大家欢迎. 今天给大家 ...
- 大数据新手的0基础学习路线,从菜鸟到高手的成长之路
大数据作为一个新兴的热门行业,吸引了很多人,但是对于大数据新手来说,按照什么路线去学习,才能够学习好大数据,实现从大数据菜鸟到高手的转变.这是很多想要学习大数据的朋友们想要了解的. 今天我们就来和大家 ...
最新文章
- 2022-2028年中国金融云行业市场研究及前瞻分析报告
- 06Chrome调试工具
- win10装centos双系统之后,win10的启动项消失的解决方法
- Eclipse python 开发环境配置
- nginx brotli 压缩试用
- v-if v-show区别(面试题)
- 惠普z6计算机进不去桌面,HP Z6 桌面工作站 | HP® HK 惠普香港
- centos 释放swap_centos6.6关闭与打开swap(整理)
- Lock-Free 编程
- python元组和列表的联系_Python | 一文看懂Python列表、元组和字符串操作
- html对话框跳转页面,html5各种页面切换效果和模态对话框用法总结
- Spring-Boot 整合Dubbo 解决@Reference 注解为null情况
- 条码扫描二维码扫描——ZXing android 源码简化
- 今天中午还收到了,一条诈骗短信,说是中奖了
- 计算机工程与工艺年会2019,计算机工程与工艺
- UL -758_2022电器布线电线电缆安全标准,刚刚发行最新版
- 塑胶模具注塑常用哪些材质
- Mysql组复制(MGR)——前提及限制
- 用于光波导耦合的倾斜光栅分析
- Packet Tracer - 配置扩展 ACL - 场景 1
热门文章
- 四川托普计算机职业学校教务管理系统,四川托普信息技术职业学院教务处
- 2021暑假牛客多校第一场A题(博弈论+暴力打表)
- 网页围棋对战闪亮登场(Flex+java)
- viper12a电源电路图_VIPER22A VIPER12A工作原理引脚功能应用电路图纸与分析
- 联想z5 android8,联想Z5
- 解决远程桌面不能用大法
- Fiddler - 快速入门(抓包)
- 2019年“深圳杯”数学建模挑战赛B题(1、2问)
- 一文搞懂Handler机制原理
- DPDK Release 20.02