两种报表组件的功能分析
一.分析对象
用友华表Cell 5.0、水晶报表Crystal Report 9.2。
二.功能描述
1.用友华表功能描述
1.1 特点:
提供类似于Excel界面的超级报表进行报表设计,包括数据填充、插入图表、单元格修饰等功能;同时提供表格、单元格、打印、记录集等方法和属性为开发者解决报表二次开发。
1.2 功能:
超级报表提供了报表的众多设计功能,操作类似于Excel。在开发过程中,可将Cell50Control控件直接嵌入,利用组件提供的方法,响应用户对报表的操作;
华表提供了相应的数据库和记录集方法,但功能不够完善,同时欠缺稳定。可以自定义数据库方法,将数据读入DataAdapter中后,根据华表的行号、列号建立一一对应关系。
组件提供了基本的打印方法,能够完成打印预览,翻页,打印设置等诸多功能。尤其提供了设置分页符功能,可以根据开发者或用户需要决定每页所显示的行(列)数。
华表报表文件格式为.CLL。同时还支持与Word文档、Excel、Html、PDF等多种格式。
2.水晶报表功能描述
2.1 特点:
水晶报表本身是一个集应用与设计为一体的报表平台。用户在使用报表时,可以直接通过界面操作,不需要编写一行代码即可完成报表对数据表数据的操作。同时还包括统计、分组、插入图表等功能。水晶报表还提供了Crystal语言规范,为高级用户提供处理复杂报表的可能。同时,在Visual Studio.Net中嵌入了Crystal Report组件,为二次开发提供了方便。
2.2 功能:
用户可以直接使用Crystal Report来进行报表设计。在开发过程中,开发者可以通过直接插入新的或已有的报表文件,并与CrystalReportViewer相连接。用户可以在开发者二次开发的平台下进行简单的报表设计或显示、打印已有报表。
水晶报表中的模板其实是与报表文件是一致的。模板提供了报表数据的显示格式,除系统本身提供的模板文件外,用户也可以自定义模板,或者把已有的报表文件定义为模板。定义好模板,只需要添加或改变模板和数据集之间的连接,即可显示具体内容。
CrystalReportViewer工具栏上提供了基本的打印操作。开发者也可以隐藏该工具栏,添加按钮,根据组件提供的Page Object和PrintStatus Object等对象方法编写代码,实现用户需要的功能。
可以输出包括.PDF、.Xls、.html等多种格式的文件。水晶报表也支持与XML文件的转换。但转换后的XML文件是水晶报表特定的Xml Schema。
三.华表与水晶报表的比较
1.华表的优势与劣势
1.1 华表的优势
超级报表的界面和操作都与Excel相类似,同时在设计表格的格式上,包括单元格的拆分和合并都非常方便,容易定制非常复杂的报表。
华表对于数据的显示是以行号和列号来定义的,因此在华表中纵向和横向的显示方法是相同的,只需要改变行、列的位置就可以了。由于华表提供了插入分页符的方法,使得横向报表的分页可以非常简单地完成。
1.2 华表的劣势
华表虽然提供了数据库的访问方法,但稳定性不够好。对于SQL语句的支持不够。因此需要自定义数据库方法,通过代码实现,加大了开发者二次开发的代码量。同时,用户在设计报表时,没有直接提供与数据库相连的控件。
虽然用户可以在超级报表中定义自己的报表格式,以形成模板。但是模板文件不能和数据集的数据建立有效连接。也就是数据需要用户人工输入,而不是直接通过代码从数据集中得到。因此后期的统计等运算功能就无法通过编码实现。
华表组件版本虽然在不断升级中,但整体性能欠缺一定的稳定性。组件所提供的方法虽然可行,但在二次开发中往往会给程序带来意想不到的bug。同时,华表所能承受的数据交换量,也值得怀疑,对大量的数据处理显得能力不足。
2.水晶报表的优势与劣势
2.1 水晶报表的优势
水晶报表对于报表的设计支持是非常强大的。用户可以根据水晶报表完成显示、统计、分组、插入图表等多种功能。对于子报表、组合报表的设计也非常简单。水晶报表还提供了设计报表的向导,轻松完成报表设计。数据库专家、节专家等功能为用户对数据库的处理提供了直观的操作方法。只需要拖动数据表的字段对象,就可以读取数据表的记录内容,并自动完成分页。
水晶报表的组件方法非常丰富,涵盖了数据库操作、格式设计、打印、文件转换等多种功能。这些方法为二次开发提供了便利。在Visual Studio.Net中,报表文件是一个项目文件,它以类的形式存在,并通过CrystalReportViewer对报表文件进行显示。CRAXDDRT组件则提供了针对各种对象的方法,例如新建、打开报表,建立、修改数据库连接等。还可以通过FieldObject中的相关对象接受公式或参数对数据表的操作。同时也可以通过TextField在报表中显示不同的内容。
用户自定义模板与设计报表完全相同。同时,定义好的模板可以通过数据库方法直接读取数据表的数据。模板的使用可以大大提供报表设计的工作效率。
2.2 水晶报表的劣势
与华表恰恰相反的是,水晶报表对复杂报表的支持远远不够。由于水晶报表不是采用单元格的方式,当用户需要合并或拆分单元格时,没有直接的方法支持。同时,很难实现横向报表。水晶报表是以节(Section)的形式纵向显示。数据表的列名显示在页眉节,列的内容在详细资料节中显示,水晶报表根据条件自动读出数据表数据纵向显示并分页。
CrystalReportViewer只显示报表文件的内容,而不支持对报表内容的实时修改。如要编辑报表数据,只有通过应用程序调用存储过程直接对数据表进行修改,然后Refresh报表显示。
四.总结及我的评价
从各自的功能和优缺点来看,两者的优势和劣势都非常明显,且恰恰相异。从整体性能看,水晶报表更稳定,功能更完善和强大。尤其是水晶报表中对数据库的支持,无论是性能上,还是提供的方法上,都具有华表所不具备的优势。然而,如果从报表显示格式来看,华表无疑更能满足中国人对报表的要求。
如果要在报表组件的基础上二次开发报表平台,我认为选择水晶报表是更佳方案。原因如下:
1.组件性能稳定
在进行二次开发时,如果所使用的组件性能不稳定,Bug百出,必然会影响开发进度,同时为系统测试带来很大的困难。
2.对数据库的支持强大
报表与电子表格最大的区别是它的数据处理能力。通过数据库而不是读取单元格的数据来完成诸如排序、统计、分类汇总、查询、更新,使得报表对数据处理的性能可以得到很大的提高。而水晶报表在一点上功能非常强大。
3.支持B/S和C/S模式的开发
虽然华表也提供了插件以支持B/S模式开发,但由于其插件是客户端组件,在软件部署时会带来很大的不便。且在客户端和服务器端的数据交换能力方面,水晶报表在技术上非常优秀。