王 毅 许学敏
(华东理工大学,上海 200237)
在高校教学管理系统中,如何将数据库中的数据打印出各教学管理部门需求的报表?本文通过VB程序设计和EXCEL软件相结合的技术,详细分析生成各种数据报表的技术方法。
在高校信息化管理系统中,教学管理部门根据教学要求,生成形式多样的数据报表。数据报表是管理人员进行决策的基础,是高效工作的保障。任何管理系统无论界面多么友好,操作多么方便,最终都要以各种报表的形式输出。所以报表输出功能的强弱往往直接影响系统开发的效果。VB作为专业的数据库开发语言之一,虽然提供了报表功能的支持,可以提供简单的数据报表输出。但用户要求的报表形式多样,特别对表格格式或者样式,例如框线样式,斜线添加,字体设置,某些单元格的合并等等。而在制表方面,微软公司的EXCEL是一款优秀的表格设计软件,支持多种复杂表格格式,如果能在VB中引入EXCEL的优势,使得二者完美结合,就可以完成复杂报表的制作过程。
一、设计思路和步骤
在华东理工大学继续教育学院的信息化管理系统中,前台开发工具使用VB,和数据库管理系统(SQL SERVER 2000)配合,采集系统中有价值的数据,再通过和EXCEL模板文件配合使用,通过编写VB代码,调用EXCEL模板文件,有效解决了各种数据报表的生成。下面以教学管理中课程表的设计和输出为例说明设计思路和步骤。
(一)用EXCEL对象设计报表模板
学院教学管理系统工作人员根据本部门教学安排要求,提出了课程表输出模板样式(EXCEL格式):见表1,希望我们能批量打印出该教学点所有课程安排,便于下发和张贴。
表1 EXCEL模板样式
与上面模板有关的EXCEL对象:Application 对象、Workbook 对象、Worksheet 对象、Range 对象和Cells对象。其中Application 对象: Excel 对象模型的顶层,表示整个Excel 应用程序;Workbook 对象: 代表Excel 应用程序中当前打开的一个工作簿;Worksheet 对象:表示Excel 的一个工作表; Range 对象: 表示工作表的某一个单元格或多个单元格; Cells 对象: 表示工作表的一个单元格。
技巧:如何获得以上表格中个参数和命令呢?打开Excel,选择“工具\宏(M)\录制新宏(R)”,按常规方法制作上面表格,再选择“停止录制”,然后对所录制的内容进行分析,就可以获得绘制各种Excel表格的方法和命令,为VB开发提供代码参考。或者参考VBA代码说明也可。
(二) 在VB中引用Excel制作报表
(1)在运行代码前,从下拉菜单“工程”中选择“引用”,进一步选择“Microsoft Excel 9.0 Object Library”,再选择“确定”,表示在工程中要引用Excel类型库。
(2)在过程中定义Excel对象:
Dim Excel_App As Excel.Application
(3)创建Excel对象
Set Excel_App = CreateObject("Excel.Application")
(4)复制事先制作的Excel模板文件(存放在应用程序中的Samples目录下)
FileCopy App.Path & "\Samples\外协_课程表所有.xls", mFileName
Excel_App.Workbooks.Open (mFileName)
(5)设置Excel对象可见(或不可见)
Excel_App.Visible = True
(6)格式化Excel工作表
‘定义需要格式化的表格范围
Excel_App.Workbooks(1).Worksheets(1).Range("A" & 23 * i + 1 & ":I" & 23 * i + 1).merge
‘设置表格水平位置
Excel_App.Workbooks(1).Worksheets(1).Range("A" & 23 * i + 1 & ":I" & 23 * i + 1).HorizontalAlignment = -4108
‘是指表格字体为粗体
Excel_App.Workbooks(1).Worksheets(1).Range("A" & 23 * i + 1 & ":I" & 23 * i + 1).Font.Bold = True
‘设置表格字号
Excel_App.Workbooks(1).Worksheets(1).Range("A" & 23 * i + 1 & ":I" & 23 * i + 1).Font.Size = 24
‘设置表格字体
Excel_App.Workbooks(1).Worksheets(1).Range("A" & 23 * i + 1 & ":I" & 23 * i + 1).Font.name = "华文新魏"
‘设置表格行高
Excel_App.Workbooks(1).Worksheets(1).Range("A" & 23 * i + 1 & ":I" & 23 * i + 1).RowHeight = 29.25
‘定义表格单元格内容
Excel_App.Workbooks(1).Worksheets(1).Cells(23 * i + 2, 1) = "开学日期:"
……
(7)生成工作表的内容
Excel_App.Workbooks(1).Worksheets(1).Cells(23 * (i - 1) + 6 + m, 1) = ctGrid1.CellText(k, 2)
Excel_App.Workbooks(1).Worksheets(1).Cells(23 * (i - 1) + 6 + m, 2) = ctGrid1.CellText(k, 3)
Excel_App.Workbooks(1).Worksheets(1).Cells(23 * (i - 1) + 6 + m, 3) = ctGrid1.CellText(k, 4)
Excel_App.Workbooks(1).Worksheets(1).Cells(23 * (i - 1) + 6 + m, 4) = ctGrid1.CellText(k, 5)
……
说明ctGrid1是VB中引用的ActiveX表格控件,用来显示系统中采集的数据,CellText是表格控件的单元格内容引用。i变量是循环体变量,通过对i的运算,用来定位输出表格中单元格的位置。
最终,用户可以看到生成的一张张报表,如同操作EXCEL程序一样简单,可以打印预览,再决定是否输出打印。或者直接调用打印程序,输出打印信息,在打印结束后,要退出EXCEL,并交还控制权给EXCEL。
‘退出Excel
Excel_App.Quit
‘交还控制权给Excel
set Excel_App=nothing
二、结束语
在VB 中结合Excel 进行复杂报表的设计,可以减轻报表设计的工作量,提高报表的灵活性。还可以直接调用printer对象完成打印功能,本文只针对客户提出样式模板,阐述了报表制作过程,为教学管理部门提供形式多样的报表。
参考文献:
1 李斌华,刁明军,文俊,方旭东 VB结合Excel进行数据处理和绘图的工程应用[J]2007
2 (美)Christopher J.Bockmann著,程志锐等译,Visual Basic 程序员实用例子库。