Excel是大家都比较熟悉的表格处理软件,用它来做自由报表载体其好处有:
l 从用户角度:
载体本身具有脚本支持,公式编辑,
模板支持,格式、版式设计等诸多功能,而这些功能对于大部分用户是比较熟悉的。省去了用户培训环节;多数办公用电脑都装有Office软件,所以,其输出的报表可以被任何装有Office软件的
计算机浏览;
l 从开发者角度:
可以通过OLE访问,提供了大量的编程接口,几乎所有的操作都可以用
程序来控制;利用宏、VBA等技术可以很轻松地编写报表设计模块。
整体思路:
程序通过OLE获取Excel的Sheet对象。遍历每个单元格,将
模板中的元素以变量、表格等替换,就生成了最终报表。其中元素种类可分为变量元素、数据集元素、数据字段元素和其它标志元素。它们都是处于单元格内的包含特殊格式的字符串,格式可以自由定义,但要保证此格式不会与正文相冲突。
如:
#ValueAA# (变量名两边加入#号,当遍历到其所在的单元格时在
程序中对单元格进行相应处理)
报表功能实现:
首先新建Excel
模板,如下图:
模板保存为template.xlt
现在模板有了,现在需要实现的功能就是分析此模板,将
模板中的元素替换为
程序中将要输出的变量或数据表。
下面我们来设计一个简单的
模板分析类(TXlTemplateAnalyzer):
公有方法:
generateReport //套用
模板生成最终报表。
registerDataSet //在DataSet列表中新增数据集。
registerParam //在Param列表中新增变量。
removeDataSet //在DataSet列表中删除数据集。
removeParam //在Param列表中删除变量。
SetSheetObject //设置
模板的Sheet对象
私有成员变量:
FBoundLeft, FBoundRight //保存左右列边界
FDataSetList //用于维护数据集列表的私有成员。
FParamList //用于维护变量列表的的私有成员。
FExcelSheetObject //被操作
模板的Sheet对象。
FCurrentRow //当前处理的行号
FCurrentCol //当前处理的列号
私有工具方法:
ProcessDataSetElement //处理数据集元素
getTemplateBoundary //获取边界索引号
parsorFieldNameFromElement //从
模板元素中提取字段名
FindParam //从FParamList中查找特定Name的变量
FindDataSet &nbs