APP下载

基于平台的报表研究与实现

2012-09-15舒清录廖明梅

大理大学学报 2012年4期
关键词:单元格中国式报表

舒清录,廖明梅

(临沧师范高等专科学校信息科学与技术系,云南临沧677000)

舒清录,廖明梅

(临沧师范高等专科学校信息科学与技术系,云南临沧677000)

在MIS系统中,设计一个既要满足系统功能又要符合用户习惯的报表,是MIS系统的重点和难点。在.NET环境下,以在线评教系统为基础,讨论一个基于结构可变的数据源,通过与COM组件通讯,实现了系统与Excel组件无缝连接的动态的中国式报表。

动态报表;中国式报表;COM组件;Excel报表

报表是用表格、图表等格式来动态显示数据的,在MIS系统中占有重要地位,其设计制作也是MIS系统开发的重点和难点之一。特别是中国式报表,以其数据展示的紧凑性,方便用户对数据作出快速的比较和扫描,符合中国人对数据报表的需求和审美观,其自动生成更需要使用特殊的处理方法。在VisualStudio.NET环境中提供两种报表,一是水晶报表〔1〕,因其功能强大而受到很多开发者的青睐,但是其并非微软的,要部署到项目中需要花费不菲的注册费,而且水晶报表设置较复杂,不易上手;再者报表的样式是在报表生成器生成设计时就事先确定的,即报表的字段是固定的,增减某些列,还需修改报表配置文件和数据源文件。二是Report Viewer报表,它是微软自己开发的报表控件,支持呈现表格格式数据和图表,并且还可以导出为Excel和PDF文件〔2〕。但报表组件不丰富,不支持最终用户自定义报表格式,如果客户对报表格式需求较为复杂时,其比较难以适应。

在线评教系统是一个对教师一学期教学情况的评价,要求对各类别所有课程和教师的授课情况做出相应的评价。报表对评价项目以及各项目下的小项投票的数目以及百分比情况比较关注,从此需求来看,此报表具有了中国式报表特点。

结合以上分析,本文提出了利用C#语言无缝连接〔3〕Excel产生复杂中国式报表的思路并对其在实际项目中的应用作出了详细的阐述。主要考虑到Excel它不仅能够方便地处理表格和进行图形分析,有强大的数据的自动处理和计算功能,数据能被用户二次利用;而且企业的业务人员大多熟悉Excel软件,这样业务人员无须再花费时间和精力去学习新的报表工具。

1 Excel对象模型与.NET的无缝连接

要利用Excel的Active Automate功能,实现数据报表的输出,必须要与Excel对象模型提供的对象进行交互。微软的Excel对象模型包括了数百个可供用户交互的对象〔4〕,本文主要使用到Application,Workbook,Worksheet,Range四个类以及它们的成员。其中Application对象处于Excel对象模型的顶层,表示整个Excel应用程序;Workbook对象处于Application对象的下层,表示一个Excel工作薄文件;Worksheet对象包含于Workbook对象,表示一个Excel工作表;Range对象包含于Worksheet对象之中,表示Excel工作表中的一个或多个单元格。

Excel组件属于COM组件,是非受管代码,与.NET组件的受管代码类型完全不同。但在.NET环境中,提供了非受管代码的COM组建向非受管代码的.NET组件转换的接口,实现.NET与COM组件的无缝连接。

2 本系统的特点和创新

2.1 数据源结构的动态可变性,增强系统的通用性根据不同的教学对象,采用不同的调查问卷模板,及时、有效地反馈教学和学生反应,是问卷系统应具有的基本功能。本系统中,用户可以根据自己的调查对象定义不同的问卷模板,把不同模板的数据存入表中。系统通过存储过程、动态构造SQL语句(实现由表1到表3的转换SQL语句字符串)等技术,自动把模板转换为有利于投票数据存储的物理表(类似表3的结构),最后通过ADO.NET、VBA等技术控制Excel在客户端自动生成复杂的中国式统计报表(类似表2的Excel电子表格)。

在表1中,第1列为问卷内容,第2列为问卷内容选项,以#号作为分隔符,其中1、2、3等分别代表各问卷选项。浏览器端投票时,数据主要存入类似表3存储结构中,为生成动态Excel报表打下基础。

本系统设计的动态报表主要是实现由表1到表3,最后形成表2的Excel报表样式的转换过程,具体的算法实现见第3部分的相关伪代码。在整个过程中,表1的第1、2列是可变的(可增加、删除),表2的结构也会随表3的变化而自动调整,使系统生成的报表具有很强的适用性和通用性。

表1 问卷模板

表2 Excel报表

表3 问卷存储表

2.2 充分发挥Excel的计算能力,减少主程序计算任务以Excel 2003为例,其提供了数据库,统计等11类不同种类的函数〔5〕,用户还可以自定义各种公式,通过这些函数公式可创建并完成各种复杂的运算,使Excel具有强大的计算能力。在.NET环境中,通过VBA调用这些函数公式完成相关数据的计算,减少主程序计算任务。

在本系统中大部分的数据都是从数据库直接查询出来的,但有些数据还需要通过计算而得,比如问卷回收率、各子项投票在回收问卷数中占的比例等数据。如果这些数据都在主程序中计算并存储,都将耗费系统一定的计算时间和存储空间。

2.3 中国式报表,符合用户对报表的审美需求国外的报表样式规整,没有格线,表头简单,没有斜线表头、分层分组,在系统中的运用也相对简单,现在很多开发环境里自带的就是类似此类报表。但从满足中国企业实际需求来说,显得不够直观、美观,不太符合中国人的审美需求。

中国式报表的最大优点就是它的紧凑性。通常在一页面的空间里,可以显示大量的信息,用户可快捷地对数据做出查询和检测。

3 报表在MIS系统中的实现

要利用COM组件,首先将组件引入到.NET环境中。在项目中打开添加引用对话框,选择COM栏,在COM列表中找到“Microsoft Excel 11.0 Object Library”,确定即可〔6〕。这样.NET就会自动产生相应的.NET组件文件,即可在.NET环境中正常使用。

下面就是程序实现的主要伪代码。

Private void Dowork(){

Excel.Application excel;//定义Excel对象

Excel._Workbook xBook;//定义Excel工作簿对象

通过ADO.NET获取模板数据集dt_struc(t类似表1)

通过ADO.NET获取评价数据集dt_mb(类似表3)

通过SaveFileDialog获取文件存放位置存入FileName

try{

添加新工作簿XBook

获取当前活动工作表XSheet

通过range,mergeCells生成标题行,占第1行

通过range,mergeCells生成统计信息(统计部门,统计人,时间),占第2行

Fo(ri=0;i<13;i++){//报表中前固定13列,从第3行开始

合并此列的第3、4行单元格

将dt_mb〔i〕.Columns中的数据写入合并后的单元格

}

Fo(rj=0;j

根据表1,取出并分离子项目(以#为分隔符)存入temp2〔〕中

获取子项目数目itemNumber

通过range,mergeCells合并单元格,每个项目占2列

将dt_struc〔tj〕〔1〕中的数据写入合并后的单元格

Fo(rk=0;k

合并此行的2列

把temp2〔k〕中的数据写入合并单元格

}

}

Fo(ri=0;i

Fo(rj=0;j<13;j++){

把dt_mb〔i〕〔j〕的数据写入单元格

range.FormulaR1C1="=RC〔-1〕/RC〔-2〕"//计算回收率

range.NumberFormatLocal="0.0%";//并将其设置为百分比

}

Fo(rk=13;k

把dt_mb〔i〕〔k〕的数据写入单元格

range.FormulaR1C1="=RC〔-1〕/回收问卷数"//计算子项占有比例

range.NumberFormatLocal="0.0%";//并将其设置为百分比

}

}

通过borders.LineStyle添加表格边框

通过HorizontalAlignment设置对齐方式

选中Cells〔5,1〕单元格,通过FreezePanes冻结窗格

通过PageSetup.PrintTitleRows=”$1:$4”,设置打印标题行

通过SaveCopyAs把创建的文件保存到FileName中

通过GetWindowThreadProcessId()API函数获取Excel线程的id号〔7〕

通过GetProcessById(参数).Kil(l),结束当前Excel进程

}

catch{

抛出“程序调用Excel遇到问题,请检查或重新安装MSofficeExcel”异常

}

}

以班级人数的80%为抽样样本,通过学生在浏览器端投票,最终得到的效如图1所示。

图1 报表效果图

4 总结

通过阐述了Visual Studio.NET提供的不同报表的优缺点,以及选择Excel作为数据报表的理由。本文围绕Excel对象模型和.NET环境,介绍了一种生成数据源结构动态可变、符合用户对报表的审美需求的中国式报表。希望能为其它MIS项目开发的动态报表的实现思路提供参考。

〔1〕李明明.VS.net中用后台线程向Excel中导入数据的研究〔J〕.测控技术,2011(8):83-86.

〔2〕周金桥.ASP.NET夜话〔M〕.北京:电子工业出版社,2009.

〔3〕吴晓敏.政府信息资源目录体系与交换体系建设再探〔J〕.信息化建设,2005(Z1):40-42.

〔4〕Ken Getz.从.NET开发人员度理解Excel对象模型〔DB/OL〕.(2004-10-27).http://msdn.microsoft.com/zh-cn/library/aa168292(v= office.11).aspx.

〔5〕陈国华.基于Excel的报表引擎的研究与设计〔J〕.计算机工程与设计,2004,25(4):526-529.

〔6〕朱波,张峰.ASP.NET平台上基于OFFICE操作集的报表生成方案〔J〕.实验室研究与探索,2007,26(10):59-62.

〔7〕宋建松.基于ole技术调用EXCEL实现复杂报表生成〔J〕.内蒙古电大学刊,2006(10):40-41.

(责任编辑 袁 霞)

On Research and Development of Excel Report Based on.NET Platform

SHU Qinglu,LIAO Mingmei
(Information Techonology Depart,Lincang Teachers College,Lincang,Yunnan 677000,China)

In the MIS system,the design of a report meeting both system function and user's habits is important and difficult.In this paper,on the basis of online teaching evaluation system and.NET environment,a model of structure-based variable data sources is discussed to realize a dynamic Chinese-style report of seamless connection with Excel component by communicating with the COM component.

dynamic report;Chinese-style report;COM component;Excel report

TP311

A

1672-2345(2012)04-0018-04

2011-11-02

2011-11-17

舒清录,讲师,主要从事数据库开发、WEB开发与应用研究.

猜你喜欢

单元格中国式报表
中国式民主
流水账分类统计巧实现
玩转方格
玩转方格
LabWindows/CVI中Excel报表技术研究
不要让中国式焦虑,废掉了你的孩子
浅谈Excel中常见统计个数函数的用法
从三大报表读懂养猪人的成绩单
中国式教育的“逆袭”
月度报表