陈一魁
摘要:信息技术无时无刻不在改变着人们的工作和生活方式,使得人们得以从重复繁琐的劳作中解脱出来,以更高的效率完成工作。该文详细讨论利用Delphi调用与操纵Excel数据的方式来实现电大学生证的自动打印,主要包括Delphi中ADO组件的应用、Excel数据的访问、通过ComObj单元接口操纵Excel实现打印。
关键词:Delphi;Excel;学生证;自动打印
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)06-1352-03
Automatic Printing of TVU Students Card Using Delphi and Excel
CHEN Yi-kui
(Shanwei Radio and TV University,Shanwei 516600,China)
Abstract: Information technology has changed people's way of life and work, makes people free from repetitive and tedious work, and completing the work with greater efficiency. Discussed in this paper is how to realize the automatic printing of TVU student card with the application of delphi and excel, including the application of ADO component in Delphi, Excel data access, printing with the way of using ComObj interface to call excel function.
Key words: Delphi; excel; student card; aotumatic printing
电视大学是由分布在基层的市县电大统一招生,由省电大和中央电大审核录取。录取工作完成后,市县电大会收到由省电大下发的Excel文档格式的录取学生名单和相应数量的空白学生证。市县电大教务人员再将学生名单和空白学生证分发给各班辅导员,由辅导员手动填写制作学生证。手写学生证存在效率低、不美观不统一、易出错等弊端。因此,如果能开发一个程序自动去调用Excel文档中的学生信息,并自动打印到学生证上,将大大提高工作效率,同时学生证也将更加美观整洁。该文将详细阐述利用Delphi技术来解决学生证的自动打印问题。
1 Delphi与ADO技术
ADO (ActiveX Data Objects) 是一个用于访问数据源的COM组件。它为编程语言与统一数据访问方式OLE DB之间建立了一个中间层,用以实现对各种数据库的数据访问。ADO提供了很多对象用于实现对数据库的连接与调用等操作,最重要的三个对象为数据库连接对象Connection, 记录集合对象Recordset和SQL命令对象Command。
Delphi 拥有一个可视化的集成开发环境(IDE),采用面向对象的编程语言ObjectPascal和基于部件的开发结构框架。在Delphi众多的优势当中,它在数据库方面的特长显得尤为突出,适应多种数据库结构、高效率的数据库管理系统、最新的数据分析手段等。在数据库调用方面,Delphi完全支持ADO数据访问技术,采用一套完整的ADO组件实现对ADO对象的封装与调用。
1.1 ADO连接组件TADOConnection
TADOConnection组件用于建立与ADO数据存储的连接,其中最主要的属性为ConnectionString属性,用于指明数据源驱动、数据库文件和登录用户及密码等数据库连接信息。
1.2 ADO数据操纵组件TADODataSet、TADOTable、TADOQuery
三个组件都可以通过TADOConnection组件或直接设置其ConnectionString属性建立数据连接,然后通过调用执行SQL语句和存储过程来操纵数据库表。三者之间,TADODataSet组件功能最强大,它封装了TTable、TQuery和TStoredProc等组件所有基于BDE程序的功能。TADOTable组件主要实现对单个数据库表的获取与操作。TADOQuery组件的使用最为灵活,通过执行SQL语句调用与操纵各个数据库表中的数据。
1.3 ADO数据集的绑定与显示
通过ADO操纵组件执行数据查询(select)操作后会返回相应的数据集合。TDataSource数据源组件用于绑定由ADO操纵组件返回的数据集,并做为TDBGrid、TDBNavigator等数据显示组件的数据源。通过图1可直观反映各个组件之间的关系。
图1 ADO组件关系图
图1中,在ADO数据操纵组件部分,该文选用了TADOQuery组件,该组件功能齐全、使用灵活。
2 Delphi与Excel的互连
Excel是目前最常用的电子表格处理软件,功能强大、使用方便。除了具备数据排版、计算处理、统计分析等功能外,Excel采用关系型数据库的方式对数据进行组织与管理。这使得Delphi通过ADO连接组件TADOConnection与Excel进行互连成为可能。
以下为TADOConnection组件连接Excel时所需要设置的ConnectionString属性的信息。
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=D:\xxxx.xls;
Extended Properties=Excel 8.0;
Persist Security Info=False
其中,Provider属性用于指明数据库驱动。Data Source属性用于指明Excel文件所在位置以及名称。Extended Properties属性用于指明所连接的目标为Excel文件。
3 Delphi打印技术
Delphi自带两款打印控件QuickReport和Rave。QuickReport是一款分栏报表生成器,因其功能有限,在Delphi 7的标准控件面板中已经被Rave报表控件取代,Rave报表控件是一个可视化的报表设计工具,提供专门的报表制作工具Rave Designer。
然而,该文将用另一种方式来实现Delphi的打印,即将数据传送到Excel报表模板文件中,再调用Excel打印方法来实现信息的打印。此种方法,利用Excel强大的排版功能来设计报表,真正实现报表设计与程序功能的完全分离,便于报表的修改。具体操作流程如下:
1)使用Excel制作报表模板文件。
2)通过ComObj单元的CreateOleObject函数建立Excel应用程序对象,并与报表模板文件进行绑定。关键代码如下:
Eclapp:=createoleobject('Excel.Application');
Eclapp.WorkBooks.Open(getcurrentdir+'\报表模板.xls' );
3)通过Eclapp对象,将数据输送到Excel报表模板指定的单元格内,再调用Excel打印功能进行打印。
调用打印功能代码为:Eclapp.ActiveSheet.PrintOut;
4 自动打印程序的实现
4.1 界面的设计
程序的界面如图2所示,上方用于选择学生录取名单所在的Excel文件,点击“提取数据”按钮后会在左边框中显示所有的专业信息,点击专业名称后,会在右边框中显示该专业对应的学生列表。在专业信息列表中单击右键可以选择打印整个专业的学生证,在学生列表中单击右键可以选择打印某个学生的学生证。
图2 学生证打印程序的界面
4.2 主要组件及设置
程序的主要组件及设置如表1所示。
表1 主要组件与设置信息列表
4.3 关键代码
4.3.1 提取录取学生名单Excel文档数据的代码
MyDM.ADOConnEXCEL.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source= ' +trim(edit1.Text)+ '; Extended Properties= Excel 8.0; Persist Security Info=False';
with MyDM.ADOQExTable1 do
begin
close;
sql.Clear;
sql.Add('select distinct 专业 from [sheet1$]');
open;
end;
4.3.2 打印单个学生证代码
use comObj,excel2000; //包括必要有控件单元
procedure TF_dyxsz.N1Click(Sender: TObject);
var
Eclapp:variant;
begin
Eclapp := createoleobject('Excel.Application');
Eclapp.WorkBooks.Open('d:\xueshengzheng.xls' );//绑定学生证报表模板文件。
Eclapp.WorkSheets[1].Activate; //设置活动工作表:
//以下为将数据输入到Excel报表模板相应的单元格内。
Eclapp.Range['B1'].Select; Eclapp.ActiveCell.FormulaR1C1:=trim(MyDM.ADOQExTable2.FieldValues['姓名']);
……
……
Eclapp.Range['G1'].Select; Eclapp.ActiveCell.FormulaR1C1:=trim(MyDM.ADOQExTable2.FieldValues['学号']);
eclapp.ActiveSheet.PrintOut; //打印
eclapp.ActiveWorkBook.Saved := True; // 放弃存盘:
eclapp.WorkBooks.Close; // 关闭工作簿:
eclapp.Quit; //退出 Excel:
end;
5 总结
综上所述,本程序通过巧妙利用Delphi的ADO组件实现对“录取学生名单”Excel文档数据的调用,再通过ComObj单元的接口函数实现将学生数据输入到学生证报表Excel模板中,然后调用Excel打印功能进行打印。很好的解决了电大学生证自动打印问题,目前本程序已经在汕尾市电大投入使用,大大提高了工作效率与学生证美观度。
参考文献:
[1] 沈才梁.Delphi 7.0程序设计教程[M].北京:北京交通大学出版社,2007:89-154.
[2] 余永武.在Delphi编程中利用Excel实现动态报表[J].安庆师范学院学报,2011,17(2):24-25.
[3] 韦伟.Delphi中利用ADO实现Excel数据导入[J].电子商务,2013(5):41-42.