APP下载

基于OLE的Word自动生成Excel题库

2015-04-16陈希高淼

电脑与电信 2015年7期
关键词:题库应用程序表格

陈希高淼

(1.武汉工程大学邮电与信息工程学院,湖北 武汉 430073;2.武汉软件工程职业学院,湖北 武汉 430205)

1 引言

在目前的在线考试系统中,如果需要对题库进行更新通常采用的格式为Excel,这种格式可以大批量地将题目导入到考试系统中。但目前在网络中找到的或者自己编写的题目经常都是以Word格式存在,这对于大量题目的更新操作带来很多不便[1]。使用者必须逐题从Word转换成Excel格式,然后再导入到系统。为了能高效简洁地完成这个过程,在VS2013的开发平台上,使用OLE技术利用Word、Excel对象模型完成此操作。

2 OLE技术和Word、Excel对象模型

OLE(Object Linking and Embedding,对象连接与嵌入)不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为组件对象模型(Component Object Model),简称COM。OLE可以用来创建复合文档,复合文档包含了创建于不同源应用程序、有着不同类型的数据,因此可以把文字、声音、图像、表格、应用程序等组合在一起。OLE技术不仅能使应用程序作为服务器被其它程序调用,还可以作为客户端调用支持OLE技术的其它程序[2]。为了能使用OLE对WORD、EXCEL进行编程,还需要了解WORD、EXCEL对象模型。

2.1 Word对象模型

Word对象模型提供了数百个可与之交互的对象。这些对象排列在一个与用户界面密切相关的层次结构中。层次结构顶部的对象是Application对象。此对象表示Word的当前实例。Application 对象包含 Document、Selection、Bookmark和Range对象[3]。

(1)Application对象

Application对象表示Word应用程序本身。

(2)Document对象

Document对象是Word编程的关键,它表示文档及其所有内容。

(3)Selection对象

Selection对象表示当前选中的区域(高亮),没有选中区域时代表光标点。

(4)Range对象

Range对象表示一块区域,与Selection类似,一般不可见。Range对象的数量可以有多个。

(5)Bookmark对象

Bookmark对象表示书签。

2.2 Excel对象模型

Excel对象模型和Word对象模型类似,下面介绍最重要的对象:

(1)Application对象

Application对象表示Excel应用程序本身。

(2)Workbook对象

Workbook对象表示Excel应用程序内的单个工作簿。

(3)Worksheet对象

Worksheet对象是Worksheets集合的成员。

(4)Range对象

Range对象是Excel应用程序中最常用的对象。

通过这4个主要对象完成EXCEL编程[4]。

3 VS2013平台下自动化操作的实现

本次程序的开发环境为VS2013+Word2010+Excel2010,使用的语言为C++。

3.1 建立自动化模式

在VS2013中创建MFC工程,非Unicode。在创建MFC工程时候,高级功能中可以勾选自动化。那么在App类的InitInstance()类中将自动生成OLE初始化程序。如果没有勾选自动化,需要自己在函数中添加如下代码:

3.2 添加对象

要调用Word、Excel提供的OLE自动化对象,可以通过Word、Excel提供的对象库实现。对象库也称为类型库,类型库详细说明了一个自动化客户端为对象需要调用的方法和属性的信息[5]。其添加方法如下:

(1)添加类型库

在项目解决方案上右键选择类向导,然后在添加类的下拉框中选择“类型库中的MFC类”。在弹出的对话框中选择相应内容,如图1所示:

图1 Word、Excel对象类的添加

添加之后如果编译遇到错误,Not enough actual parameters for macro'DialogBoxW'。解决方法是在CRange类中DialogBox()前面添加下划线变成_DialogBox()即可。

(2)注销每个引入的头文件的import行

例如:

//#import"D∶\ProgramFiles(x86)\MicrosoftOffice\Of -fice14\MSWORD.OLB"no_namespace

(3)设置默认参数和定义对象

在很多函数的使用过程中需要用到ColeVariant类型的变量,所以提前在程序开头定义一些默认参数以便后续使用。

COleVariantcovZero((short)0),covTrue((short)TRUE),covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),covDocxType((short)0);

表1 定义对象

3.3 读取文档内容

使用open()函数打开文档,函数使用参数中需要用到默认值的可以使用上一步定义的ColeVariant类型的变量。在打开文档后根据需要设置读取方式,本文采用段读取。代码如下:

//打开文档

docxs=wordApp.get_Documents();

docx=docxs.Open(COleVariant(strPath),covOptional,cov-False,covOptional,covOptional,covOptional,covOptional,covO-ptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional);

3.4 写入Excel表格

使用之前定义的对象完成Excel表格初始设置,然后使用SetString()函数将上一步读取的内容写入到Excel中。代码如下:

3.5 保存关闭和释放

将内容写入到Excel表格后就要进行保存、关闭和释放。代码如下:

workbook.SaveCopyAs(COleVariant(file_name));//保存docx.Close(covFalse,covOptional,covOptional);//关闭workbook.Close(covTrue,covOptional,covFalse);//关闭

//释放资源Word释放方式相同只列出Excel worksheet.ReleaseDispatch();worksheets.ReleaseDispatch();

4 结语

Word文档和Excel电子表格的自动化操作在目前的在线考试系统中有着重要的作用,利用OLE技术可以很方便地将Word文档的题目导入到Excel表格中,这使得在线考试系统的题库扩充变得更加容易。随着信息化技术的不断提升,越来越多的课程将会采用在线考试系统来完成做题和考试。本文提供的方法将极大地提高在线考试题库的数量。

[1]陈莉,徐芳.基于VBA编程的网络教学试题库批量试题录入研究[J].软件导刊,2015,(4):30-31,32.

[2]程松涛.基于VC++的Word自动化操作研究[J].电脑编程技巧与维护,2015,(04):33-34.

[3]Word 对象模型[OL].https://msdn.microsoft.com/zh-cn/library/kw65a0we.aspx.

[4]Excel对象模型[OL].https://msdn.microsoft.com/zh-cn/library/wss56bz7.

[5]陈特放,方斌.VC平台下基于OLE的Word自动化操作应用[J].计算机应用与软件,2009,26(9):123-125.

猜你喜欢

题库应用程序表格
《现代临床医学》来稿表格要求
《现代临床医学》来稿表格要求
“勾股定理”优题库
“轴对称”优题库
统计表格的要求
“轴对称”优题库
“整式的乘法与因式分解”优题库
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
本刊表格的要求