1 设计思路
Java 对于Excel 的操作一般借助于POI 类库,由于有些报表的表头比较复杂,直接用POI 控制报表的生成比较困难,这时可以先制作Excel 报表模板,而后再通过Java 调用POI 函数将用户数据写入到Excel 报表模板,最后导出到新的目标文件即可。
2 设计步骤
2.1 初始步骤
2.1.1创建Excel 报表模板
根据需要设计出Excel 报表,并保存为default.xls。如下图所示。
2.1.2创建ExcelTemplate类
/**
* 该类实现了基于模板的导出
* 如果要导出序号,需要在excel中定义一个标识为sernums
* 如果要替换信息,需要传入一个Map,这个map中存储着要替换信息的值,在excel中通过#来开头
* 要从哪一行那一列开始替换需要定义一个标识为datas
* 如果要设定相应的样式,可以在该行使用styles完成设定,此时所有此行都使用该样式
* 如果使用defaultStyls作为表示,表示默认样式,如果没有defaultStyles使用datas行作为默认样式
*/
public class ExcelTemplate {
private ExcelTemplate() {
}
public static ExcelTemplate getInstance() {
return et;
}
}
下面是以后要用到的一些变量和常量
/**
* 数据行标识
*/
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<Integer,CellStyle> styles;
/**
* 序号的列
*/
private int serColIndex;
2.2 读取excel报表模板的数据