这几天晚上整理报表工具,做了一次测试,这是一个例子,大家看看怎么样,能更简化吗?功能还欠缺什么?
这是数据项左侧显示
这是数据项上方显示
相关程序
private void testBuild() throws Exception {
Result srcResult = buildTestSrcResult(5); // 随机生成原始数据(5行)
srcResult.setValue(0,4,null);//增加一个空值,检验空值的影响
debug(srcResult);//显示原始数据集
ReportManager manager = new ReportManager();//报表生成类
manager.setTdDefaultValue("width","66");//设置表格默认宽度,也可以用setDefaultValue实现
manager.setDefaultValue(AttrItem.TABLE,"id","22222"); //设置表格的默认属性
manager.setIsLineColor2(true);//设置隔行显示
AttrItem item;
manager.setTablePropertyValue("id","111"); //定义表格的id,这里是
manager.setDefaultValue(AttrItem.TEXT,AttrItem.NULL_VALUE,"---");//默认空值显示字符串
manager.setTdDefaultValue("nowrap","true");//设置表格默认属性
item = manager.addGroupItem(ReportManager.LEFT,0,0);//左边按第0列分组,同时按第0列排序
item.setTdPropertyValue("width",61);//本类数据的宽度
item.setTdPropertyValue("bgcolor","#8800FF");//本类数据的背景色
item.getHeadAttrItem().getDataProperty().setValue("地区");//设置标题
item.getHeadAttrItem().setTdPropertyValue("bgcolor","#CC3366");//设置标题的背景
item= manager.addHeadStatItem(ReportManager.LEFT,ReportManager.BEGIN_STAT,0,0,StatItem.STAT_TYPE_SUM,"合计");//增加合计,在开始位置
item.getHeadAttrItem().getTdProperty().setPropertyValue("align","center");//设置格式
item.getHeadAttrItem().getTdProperty().setPropertyValue("bgcolor","#FF88FF");//设置背景
item = manager.addGroupItem(ReportManager.LEFT,1,1);//左边按第1列分组,同时按第1列排序
item.getTdProperty().setPropertyValue("bgcolor","#8800FF");
item.getHeadAttrItem().getDataProperty().setValue("员工");
item.getHeadAttrItem().getTdProperty().setPropertyValue("bgcolor","#009900");
//上边按第1列分组,同时按第1列排序----在第1层
item = manager.addGroupItem(ReportManager.UP,2,2);
item.getHeadAttrItem().getDataProperty().setValue("类别");
item.getTdProperty().setPropertyValue("width",42);
item.getTdProperty().setPropertyValue("bgcolor","#0088FF");
item = manager.addGroupItem(ReportManager.UP,3,3);
item.getHeadAttrItem().getDataProperty().setValue("月份");
//上边在第1层的第一个统计项
item = manager.addHeadStatItem(ReportManager.UP,ReportManager.END_STAT,0,0,StatItem.STAT_TYPE_SUM,"小计");
item.getTdProperty().setPropertyValue("bgcolor","#ff5555");
item.getHeadAttrItem().getTdProperty().setPropertyValue("bgcolor","#0000FF");//蓝色
//上边在第1层的第2个统计项
item = manager.addHeadStatItem(ReportManager.UP,ReportManager.END_STAT,0,1,StatItem.STAT_TYPE_SUM,"合计");
item.getTdProperty().setPropertyValue("width",92);
item.getTdProperty().setPropertyValue("bgcolor","#ff5555");
item.getHeadAttrItem().getTdProperty().setPropertyValue("bgcolor","#ccccFF");
manager.addHeadStatItem(ReportManager.LEFT,ReportManager.BEGIN_STAT,1,0,StatItem.STAT_TYPE_SUM,"HJ");
//上边在第1层的第3个统计项
item = manager.addHeadStatItem(ReportManager.UP,ReportManager.END_STAT,0,1,StatItem.STAT_TYPE_FORMULA,"合计公式");
item.setFormula(new com.webrate.data.formula.RecordAdd2(0,-1,new Integer(1)));
item.setDataPropertyValue(AttrItem.NULL_VALUE,"--");
item.getDataProperty().setDoubleMaxScale(2);
item.getTdProperty().setPropertyValue("bgcolor","#ff5555");
item.getHeadAttrItem().getTdProperty().setPropertyValue("bgcolor","#33ccFF");
//上边在第1层的第4、5个统计项,支持重复列
item = manager.addHeadStatItem(ReportManager.UP,ReportManager.END_STAT,0,0,StatItem.STAT_TYPE_SUM,"XJ");
item = manager.addHeadStatItem(ReportManager.UP,ReportManager.END_STAT,0,0,StatItem.STAT_TYPE_SUM,"XJ");
// 定义第1个数据项
item = manager.addDataItem(4,"数量");
item.getTdProperty().setPropertyValue("width",51);
item.getTdProperty().setPropertyValue("bgcolor","#ff8888");
item.getHeadAttrItem().getTdProperty().setPropertyValue("bgcolor","#4444FF");
item.getDataProperty().setDoubleScale(1);
// 定义第2个数据项
item = manager.addDataItem(5,"金额");
item.getDataProperty().setDisplayTag(AttrItem.INPUT_TEXT);// 标题同样可以使用其它类型
item.getDataProperty().setName("je");//变量名,生成后根据行和列得到类似je_1_2的名字
item.getDataProperty().setDoubleScale(2);//小数位数
item.getTdProperty().setPropertyValue("width",52);
item.getDataProperty().setPropertyValue("size",12);//数据的属性size=12
item.getHeadAttrItem().getTdProperty().setPropertyValue("bgcolor","#44FFCC");
item = manager.addDataItem(-1,"公式");
item.setFormula(new com.webrate.data.formula.RecordMul2(0,-2,-1));//左边两个数相乘
item.getHeadAttrItem().getTdProperty().setPropertyValue("bgcolor","#4444FF");
manager.addInitNode(ReportManager.LEFT,0,"上海1");//在左边第0层强行增加一个分类项(没有数据也显示)
manager.addInitNode(ReportManager.LEFT,0,"上海");//在左边第0层强行增加一个分类项(没有数据也显示)
//manager.setIsLeftData(true);//数据项在左侧
manager.buildNewResult(srcResult);//对结果集进行处理
manager.spanNewResult();//对表格区域的表格进行合并(规则略)
debug(manager);//输出
}
这个工具还能支持分页显示,也能生成更复杂的表格,这里主要是展现不同区域可以设置不同的属性。