.net的web报表设计工具
e表介绍
e表是一个功能强大的Web报表工具,提供了高效的报表设计方案、强大的Web报表展现能力、灵活的部署机制。使用e表可使复杂报表的设计简单化,以往难以实现的报表可以轻松实现,避免了大量的复杂SQL编写以及编程来准备数据,报表设计的效率大大提高。
e表是纯 .NET的报表工具,在.NET环境下可以无缝嵌入应用系统,因此在.NET应用中比其他非.NET的报表工具有明显优势。
用户可以通过报表设计器直接设计各种复杂格式的报表,在运行时通过报表服务器自动提取数据生成报表,可以通过Web方式展现、打印、导出。
e表内置了一个强大的表单设计器,使用它可以可视化地设计报表的查询条件的输入界面。e表的报表设计器也是在IE浏览器中直接运行的。这样用户可以很方便地将报表设计器嵌入到自己的产品中。
下面是e表系统结构图:
e表特点
e 表 特 点 |
|
部署与集成(.NET环境) |
|
应用集成 |
纯.net应用程序,可直接嵌入用户的应用程序中 |
负载均衡 |
可以直接使用应用服务器的负载均衡体系 |
数据库连接 |
可以直接使用应用服务器的连接池 |
报表设计器的集成 |
可以将报表设计器作为一个模块直接集成到用户的应用中 |
activeX控件 |
只有要精确控制客户端的打印机处要用到一个activeX控件(如不需要精确打印的话,则此控件可不下载.而且此控件很小,仅75K) |
Excel软件的安装 |
客户端和服务器端都无须安装 |
|
|
报表设计 |
|
报表设计器 |
在IE浏览器中直接运行报表设计器 |
编辑操作 |
与EXCEL处理方法类似 |
Excel导入 |
支持,可以直接使用原来绘制好的EXCEL表格 |
查询条件界面 |
内置一个功能强大的可视化的表单设计器,可以很方便地设计功能复杂的查询条件输入表单 |
报表格式文件的格式 |
在报表设计器中设计的报表文件采用html语言的格式,这样可以充分利用上html的强大的样式功能,因为html语法众所周知,所以也大大地降低了学习成本 |
报表格式文件保存到数据库中 |
支持 |
自定义数据集 |
支持 |
多数据源多数据集 |
支持 |
内建数据集 |
支持 |
利用宏替换来扩充报表格式文件 |
支持 |
|
|
支持的报表种类 |
|
简单的数据列表 |
支持 |
分组报表 |
支持 |
交叉表 |
支持,且与其他报表类型是一致的,可以混合和进行各种变化 |
超级链接 |
支持 |
公式计算 |
支持 |
根据条件改变格式 |
支持 |
斜线 |
支持 |
统计图表 |
支持 |
图片字段展现 |
支持 |
横向展开 |
支持 |
不规则分组 |
支持,在报表中即可轻松实现 |
多表数据 |
支持 |
主从报表 |
无须子表概念即可完成 |
子报表 |
支持,多层任意,格线可对齐可缩放,横纵向均可自动摆位 |
跨行组运算 |
支持,提供了强有力的扩展坐标,可以任意进行计算 |
不规则的分片报表 |
支持,上下格式可不一致,固定变动混合,直接运算性能高 |
可重复划分 |
支持 |
跨表取数 |
支持 |
|
|
报表展现 |
|
HTML方式展现 |
支持 |
精确打印 |
支持 |
导出至PDF |
支持 |
导出到Excel |
支持,而且在客户端和服务器端都无须安装Excel软件的情况下实现数据和样式不失真地导出到Excel |
套打 |
底图描绘方式,轻松简单 |
多栏 |
支持 |
打印分页 |
横纵向均可,强制分页,按公式条件分页 |
其他打印控制 |
一纸多页,补空行 |
|
|
纯.NET写的web报表工具
目前,.net环境下能够使用的web报表工具主要有以下两类:
1 水晶报表,它集成在VS.NET开发环境下,成为最普及的报表工具。但水晶报表仍有这样或哪样的不尽如意的地方。在此就不详述了。
2 activeX控件式,它最典型的代表有cell插件和如意报表。
以上两类都能应用在 .net程序中,但都不是用纯 c# 或VB.net等语言写的。这样在和.net的web应用程序集成及部署时会有诸多不便。
随着 .net 应用程序越来越普及,迫切需要有用纯 .NET写的web报表工具。e表3.0正是这样的一个web报表工具。它的服务器端全部是用c# 语言实现的。可以自然地和.net应用程序集成。可以和用户的应用程序共用数据库连接。提供丰富的编程接口供用户全面控制每一个细节。
类Excel报表设计界面
报表绘制的方法一般有 网格式 和 控件拖拽式 两种,前者采用和EXCEL类似的方案,用网格线围出报表;而后者则是用矩形框等元素拼出报表。
国内报表对样式要求非常复杂而且严格,绘制方案是报表工具相当重要的指标,它决定了报表样式的复杂度和绘制效率,特别是对于格线比较多的表。
传统的报表绘制,大多数是用的拖拽式,拿部件拖来拽去。表格线需要靠矩形边框重合摆放拼接出来,常见的复杂多层表头画起来非常繁琐,数据区某些纵向合并格甚至无法绘制出来(或者需要特定程序控制才能实现),拼出的格线还与分辨率相关,屏幕上对齐的表在打印时或在WEB上显示时又可能不整齐。
网格式在这方面有明显的优势,能够画出样式很复杂的报表,绘制效率也比控件拖拽式高出许多。由于MS Excel软件的普及,在大多数人心中画表软件就是Excel,对于Excel软件的操作也都很熟悉。这样也能节省许多学习成本。
所以,类EXCEL的方法明显优于拖拽式,或者说,画报表就应该是用象Excel那样的方法。大概稍有点常识的人,都会拿Excel画表吧。所以,类Excel是必然的方向。
e表正是采用类Excel(网格式)的报表绘制方案,没有采用控件拖拽式。
报表绘制方式的演变
因为Excel很早就已普及了。所以提及报表工具,自然首先都会想到用类Excel方式,而为什么控件拖拽式的报表工具会这么多呢?
这是因为Excel虽然具有强大的绘表能力,但数据处理能力非常弱,除非用“A2+B3=D4”这样的公式将单元格联系起来,否则单元格之间是相互独立的,没有任何关系的。如果要从数据库或数据文件中取数,需要程序员一个单元格一个单元格去定义,工作量相当繁重。需要靠程序员编程来实现动态行列报表的制作。
因为报表格式只是报表工具要解决的一部分问题。我们用报表工具的目的,是要能从数据库中读出数据,从而自动产生报表,数据才是报表要解决的核心问题。报表格式用Excel可以解决得很好,但是Excel没有良好的从数据库中进行数据汇总方案,除非编程序往格子里填数据,基本上没法从数据库中读出数据自动产生报表。因此这种报表几乎都只能做静态报表。
而拖拽式的格式虽然解决得一般,但从数据库中取数进行数据统计能力方面要比Excel强得很多,两害相权取其轻,堆框虽费劲,慢慢堆就行了,但统计汇总不行的话那就没办法了。
报表工具软件和其它软件一样都是国外先做出来的,而国外的报表的样式非常规整,没有格线,表头非常简单,没有斜线表头、没有分层分组。一张报表提供的信息有限,如果要看所有信息,就只能几张表对照着看了。因而国外的报表工具采用控件拖拽式能弱化报表样式绘制能力弱的缺点。而国内的报表工具基本上都是学习国外的报表工具模型来设计的。而中国式报表的样式相当复杂,所以很多报表工具都被迫再辅以大量的程序代码来处理中国式报表,这也使得用户在买了报表工具后,做报表的工作量还是很大。
扩展单元格 ==> 报表
Excel绘表方式能解决报表样式问题,但Excel的这种基于自由单元格的模型和基于二维表的数据库物理表模型没法有机的结合起来。控件拖拽式绘表能很好地从数据库中取数,但又无法处理复杂的报表样式。因而迫切需要一种新的报表实现方式。
e表就是采用了一种新的报表实现方式。在e表中,一个报表被认为是由单元格扩展而来的。即先采用类Excel方式绘制好静态报表。当然在其中预置了一些扩展单元格的公式。而在运行报表时根据公式横向或纵向扩展单元格而得到真正的报表结果。这样就同时兼顾了报表样式和从数据库中自动取数这两个方面。
控件拖拽式报表工具除了样式绘制麻烦之外,还有它最终是由单个数据集循环展开而得到报表的致命弱点,报表的形成是由单个数据集的循环再结合报表格式文件的定义而得到真正的报表结果,它相当于只有一个循环运算点。
而e表因为可以在一个类Excel的静态网格报表上定义无限多的扩展公式,运算报表时这些扩展公式同时扩展,每个扩展公式可以基于不同的数据集。它相当于有无限多个循环运算点。因此报表的表现力大大增强,可以说是复杂统计报表的克星。
运行报表后得到如下结果:
导入/导出Excel文件
因为Excel的易用,使得用户能够自己做表,几乎所有用户的报表都有Excel文件。用户希望能将Excel的文件读入报表工具,这样就可以省去画表的工作了;同时,生成的报表,要能导出成Excel文件,这样用户就可以在其上再加工处理。因而对于一个报表工具来说,有没有完善的导入/导出Excel文件的功能是至关重要的。
在.net开发环境下,实现导出Excel文件有如下三类方式:1 只导出数据,不导出格式。生成csv的文件。2 利用Excel软件本身带的com控件来实现。这种方式的弱点是需要安装Excel软件,且可能有Excel软件的各个版本之间的兼容性问题。还有就是Excel软件中的com控件的庞大的接口需要学习。3 自己写代码实现标准Excel格式文件的二进制层面的读写。
e表就是采用第3种方式。e表系统中有一个用c#写的ebexcel.dll来实现标准Excel格式文件的二进制层面的读写。这样做的好处是在客户端和服务器端都不用装excel软件的情况下实现Excel文件的不失真读写。
web打印/套打
自从开发web程序以来,web打印就一直是困饶大家的大问题。基于web的打印,难度在于要将浏览器中呈现的html,精确地打印到票据中,而且能够实现对分页位置的控制。下面就IE浏览器所能采用的打印解决方案,来个汇总分析。
一、 浏览器的打印功能菜单
这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如:
1 不能精确分页。
浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。会有页脚页眉干扰。
2 不能准确地控制边距及打印文字。
3 不能解决连续打印。
比如,不是仅打印一张票据,而是连续一次打印若干个票据。
二、 使用webbrowser控件+ javascript
这实际上,是浏览器打印功能菜单的一种程序调用,与打印功能菜单没什么两样。分页的问题仍然存在,只不过,可以让用户不用去点菜单,直接在网页中的一个按钮,或一个链接里面调用罢了。
三、 使用print css
这是一种最理想的实现web套打的方法。这种方法通过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。显而易见,这种方式成本小,不需要下载任何插件,而且跨平台性非常好。print css推出已经有些时日,但遗憾的是,至今没有一个厂商的浏览器很好地实现了这些标准,这使得程序员目前还不能利用print css进行实际的开发。关于打印css,参见:
http://css-discuss.incutio.com/?page=PrintStylesheets
四、 使用pdf文件
用这种方式,就是从服务器端下载一个pdf文件流,在IE中用adobe插件打开,然后用adobe的打印菜单进行打印,虽然这种方案,也能实现精确套打,但需要下载adobe插件。这是国外报表工具经常推荐的一种打印方法,但在pdf不那么普及的中国,这种方案不是最好选择。
五、 采用纯ActiveX
这种方案就是下载一个控件,票据的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好,但缺点也是很明显的,嵌入ActiveX控件破坏了web应用的整体html风格,且这样的控件比较大(一般超过1M,下载颇费时间)。
六、 采用Applet方式
采用Applet方式,分页或精确打印,都可以做到完美,但缺点也很明显,表现在:
1安装Applet成本巨大。需要下载十几M的文件。
Applet本身可能并不大,但运行Applet所需的jre一般至少10几M(jre1.4.2 , 15.45M)。用户需要极大的耐心,来进行打印。
2打印报表时,需要重新向服务器检索数据,效率低。
因为Applet方案,一般采用html方式呈现数据,打印时Applet必须向服务器检索同一张票据的数据,看上去,是打印了当前页的票据,实际上,Applet根本不会用当前html页的数据来打印,而是向服务器下载数据到Applet中来打印。也就是说,打印的话,必须两次请求,一次html呈现,一次用来打印。
七、 轻量级的ActiveX打印方式
轻量级的ActiveX打印方案的优点是:
1. 效率高;
可以直接打印指定的html文档,不必向后台再次提起请求。
2. 能做到精确打印,分页;
3. 功能丰富,
可以利用该控件,实现对当前票据文档的打印,预览,及多个html文档的连续打印。
4. 下载量小, ActiveX只有75K。
e表就是采用第七种方式来实现报表的打印。e表内置了一个用c++写的轻量级的ActiveX控件来精确地控制客户端的打印机。一举解决web打印问题。
查询条件输入表单
一般来说,大多数的报表都需要根据输入的报表参数而得到不同的结果。例如:日报表需要根据输入的日期来得到到底是要哪一天的日报表。这时就需要日期的输入界面,它被称为是查询条件的输入表单。
查询条件的输入界面是千变万化,没有一定之规的。很多报表工具只是提供一个自动生成这个界面的功能。可想而知,自动生成的界面往往无法满足用户的多样化的需求。甚至于有的报表工具就没有此功能,由用户用程序写去。而查询条件输入表单是报表密不可分且又不可或缺的一部分,如果查询条件输入表单没做好的话,往往会造成用户在使用了报表工具后还是需要大量的编码工作。
e表内置了强大的eform可视化自定义web表单工具的主要部分,由它来解决查询条件输入表单的制作问题。它提供了下拉列表,页签控件等丰富的页面控件,完整的数据验证机制,也可以通过自定义事件来实现复杂的控制。通过将输入控件和报表参数进行绑定来将查询条件的输入表单和报表联系起来。它采用可视化的设计界面,既可以通过简单的控件拖拉绑定实现简单的查询条件输入表单,又可以通过写事件的代码来实现复杂的查询条件输入表单。一举解决了查询条件输入表单的多样化问题。
在线演示地址: http://www.fcsoft.com.cn