java不固定模板excel_Java+POI+模板”一:打造复杂Excel 报表

Java+POI+模板”一:打造复杂Excel 报表

博客分类:

1 设计思路

Java 对于Excel 的操作一般借助于POI 类库,由于有些报表的表头比较复杂,直接用POI 控制报表的生成比较困难,这时可以先制作Excel 报表模板,而后再通过Java 调用POI 函数将用户数据写入到Excel 报表模板,最后导出到新的目标文件即可。

2 设计步骤

2.1 初始步骤

2.1.1创建Excel 报表模板

根据需要设计出Excel 报表,并保存为default.xls。如下图所示。

02508a181c6bf6af9170ea56599d44d5.png

2.1.2创建ExcelTemplate类

Java代码  bf632ec55a05f69a9359f73417402b26.png

/**

* 该类实现了基于模板的导出

* 如果要导出序号,需要在excel中定义一个标识为sernums

* 如果要替换信息,需要传入一个Map,这个map中存储着要替换信息的值,在excel中通过#来开头

* 要从哪一行那一列开始替换需要定义一个标识为datas

* 如果要设定相应的样式,可以在该行使用styles完成设定,此时所有此行都使用该样式

* 如果使用defaultStyls作为表示,表示默认样式,如果没有defaultStyles使用datas行作为默认样式

*/

public class ExcelTemplate {

private ExcelTemplate() {

}

public static ExcelTemplate getInstance() {

return et;

}

}

下面是以后要用到的一些变量和常量

Java代码  bf632ec55a05f69a9359f73417402b26.png

/**

* 数据行标识

*/

public final static String DATA_LINE = "datas";

/**

* 默认样式标识

*/

public final static String DEFAULT_STYLE = "defaultStyles";

/**

* 行样式标识

*/

public final static String STYLE = "styles";

/**

* 插入序号样式标识

*/

public final static String SER_NUM = "sernums";

private static ExcelTemplate et = new ExcelTemplate();

private Workbook wb;

private Sheet sheet;

/**

* 数据的初始化列数

*/

private int initColIndex;

/**

* 数据的初始化行数

*/

private int initRowIndex;

/**

* 当前列数

*/

private int curColIndex;

/**

* 当前行数

*/

private int curRowIndex;

/**

* 当前行对象

*/

private Row curRow;

/**

* 最后一行的数据

*/

private int lastRowIndex;

/**

* 默认样式

*/

private CellStyle defaultStyle;

/**

* 默认行高

*/

private float rowHeight;

/**

* 存储某一方所对于的样式

*/

private Map styles;

/**

* 序号的列

*/

private int serColIndex;

2.2 读取excel报表模板的数据

Java代码  bf632ec55a05f69a9359f73417402b26.png

/**

* 1、读取相应的模板文档

*/

public ExcelTemplate readTemplateByClasspath(String path){

try {

wb=WorkbookFactory.create(ExcelTemplate.class.getResourceAsStream(path));

initTemplate();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值