DATABASE AND INFORMATION MANAGEMENT 数据库和信息管理
编程实现快速语音阅读数据库
梁海珍
(武警指挥学院模拟中心,天津 300350)
摘 要: 利用 VC++调用 Excel的语音阅读功能,实现快速语言阅读并显示数据库内容。
关键字: VC++;Excel;语音阅读
1 前言
很多程序都可以进行语音阅读,进一步方便用户,典型
的就是金山词霸,可以对指定词汇阅读。使用 VC++开发的语
音阅读应用程序大多数都是基于 API将文本转换为语音输出,
文中利用 VC++调用办公软件 Excel可以方便快速实现语音阅
读,简便易行。Excel是常用的办公软件,将它运用到 VC++
应用程序中,在不需要附加成本的情况下可以充分利用其各
种功能为办公带来便利,使功能实现起来更加便捷。
2 编程实例
常用办公软件 Excel具有语音朗读功能,可以朗读所选单
元格内容。以 Excel2003为例,菜单“工具”->“语音”,显
示“文本到语音工具栏”,选中需阅读的单元格,点击工具栏
的“朗读单元格”按钮,即阅读单元格内容。在 VC++编程
中,通过调用这一语音功能,在不显示 Excel程序界面的情况
下将指定内容写入 Excel单元格中实现语音朗读。
使用自动化功能从 Visual C++应用程序中控制 Microsoft
Office组件,自动化建立在组件对象模型(COM) 的基础上。
COM是一种基于接口的标准软件结构,可将代码分离为独立
的对象,每个对象都公开一组接口,到对象的所有通信(如
初始化、通知和数据传输) 都是通过这些接口进行的。VC++
可以用 3 种方法实现自动化来控制 Microsoft Office 组件:
COM库函数、MFC 的 ClassWizard、#import指令。
本例选用第二种方法,并在 2.3实现步骤中体现应用:
(1) 创建工程,初始化 COM。在应用程序类的 InitIn-
stance中添加 AfxOleInit ()。
(2) 创建组件包装类:通过" AddClass",选择 From a
Type Library (来自类型库)。
(3) 释放组件对象:ReleaseDispatch ()。
2.1 实例运行
本例建立名为“yuyin”的 Access数据库,程序运行界面
如图 1所示。按钮“读取数据库”将数据库中的内容显示于
上方列表中,当用户选中某一行记录时,当前该条记录的书
名字段和出版社字段内容显示在下方相应的编辑框中,并完
成对所选行内容进行语音朗读。
2.2 编程原理
程序运行时,读出数据库中记录显示在列表中。当用户
选定数据库中的某条记录时,启动 Excel。如果启动 Excel失
败则给出提示信息,否则成功启动 Excel并使其应用程序不可
见。同时利用空模板建立新的 Excel文档,将所选中的记录内
容写入 Excel文档的单元格中,调用语音朗读功能朗读单元格
内容,朗读完毕后释放程序中用到的有关指针,并退出 Excel
应用程序。
由于本例中数据记录为两个字段,所以分别写入单元格
A1,A2中,朗读单元格内容即可。朗读完毕后释放指针,并
退出 Excel应用程序。
2.3 实现步骤
(1) 建立数据库
Access程序中建立数据库 yuyin,表中设计两个字段,书
名与出版社。
(2) 创建工程 yu
VC++建立基于 Dialog-Base MFC AppWizard Exe 工程 yu,
The Fast Realization of Speech Reading Database by Programming
LIANG Haizhen
(Simulating Center, Command College of Armed Police Forces, Tianjin 300350)
Abstract: The speech function of Excel is used VC++ in programming. The context of database is displayed.
Key Words: VC++; Excel; speech reading
本文收稿日期:2009-2-16
图 1 例程运行界面
yu
读取数据库
信息管理系统→电子工业出版社
数据结构→清华大学出版社
程序设计基础→机械工业出版社
信息管理系统 电子工业出版社
89- -
电脑编程技巧与维护
在 yu.cpp中添加代码利用 ADO连接数据库 yuyin.mdb。
//初始化 COM
AfxOleInit () ;
//创建 ADO连接
m_pConnection.CreateInstance (__uuidof (Connection)) ;
//打开 Access库 yuyin.mdb
m_pConnection->Open (" Provider=Microsoft.Jet.OLEDB.
4.0;Data
Source=yuyin.mdb" ,"" ,"" ,adModeUnknown) ;
(3) 添加头文件
在 yuDlg.cpp中添加如下头文件:
#include " excel.h" //本例调用 excel2003
(4) 添加类并声明类对象
进入“ClassWizard”,点击“Add Class”,选择“From A
Type Library”,找到 office目录下的“excel.exe”,选中本例中
用到的类 _Application、Workbooks、_Workbook、Worksheets、
_Worksheet、Range 并进行添加,在 yuDlg.cpp 中声明每个类
相应的对象 ExcelApp、books、book、sheets、sheet、range,如
下:
_Application ExcelApp;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
Range range;
(4) “读取数据库”按钮代码实现功能
列表控件 m_AccessList显示数据库内容,当选中列表中某
一行记录时,对应内容显示于下面的两个编辑框中,其中
IDC_EDIT2显示书名内容,IDC_EDIT3显示对应出版社内容。
有关列表控件操作在此不做详解,语音朗读是在 On-
SelchangeList1() 函数中,函数中主要代码如下:
void CYuDlg::OnSelchangeList1 ()
{
//记录指针移动,显示内容
int curSel = m_AccessList.GetCurSel () ;
…
m_pRecordset->MoveFirst () ;
m_pRecordset->Move (long (curSel)) ;
…
//启动 Excel
::CoInitialize (NULL) ;
if (! ExcelApp.CreateDispatch (" Excel.Application" ,
NULL))
{
AfxMessageBox (" 启动 Excel失败!") ;
exit (1) ; //启动失败则退出
}
//启动成功,设 excel应用程序界面不可见
ExcelApp.SetVisible (false) ;
books=ExcelApp.GetWorkbooks () ;
//利用空模板文件建立新文档
book=books.Add (COleVariant ("")) ;
sheets=book.GetWorksheets () ;
sheet=sheets.GetItem (COleVariant ((short) 1)) ;
//第一字段显示在 A1单元格中并朗读
range =sheet.GetRange (COleVariant ( " A1" ) , COle-
Variant (" A1")) ;
CString str;
GetDlgItemText (IDC_EDIT2,str) ;
range.SetValue2 (COleVariant (str)) ;
range.Speak ( COleVariant ( ( short) 0) ,COleVariant
((short) 1)) ;
//第二字段显示于 A2单元格中并朗读
range =sheet.GetRange (COleVariant ( " A2" ) , COle-
Variant (" A2")) ;
str="" ;
GetDlgItemText (IDC_EDIT3,str) ;
range.SetValue2 (COleVariant (str)) ;
range.Speak ( COleVariant ( ( short) 0) ,COleVariant
((short) 1)) ;
//释放指针
range.ReleaseDispatch () ;
sheet.ReleaseDispatch () ;
sheets.ReleaseDispatch () ;
book.ReleaseDispatch () ;
books.ReleaseDispatch () ;
ExcelApp.ReleaseDispatch () ;
//退出 Excel
ExcelApp.Quit () ;
…
}
本例中朗读内容为汉字,所以选择的语言为 Simplified
Chinese,这样对英文单词则是逐个字母识别。如果需要识别
英文则可以通过“控制面板”,单击“声音、语音和音频设
备”,选择“语音”中的“文字-语音转换”选项卡,在“语
言选择”下,选择其他语言。
3 结语
在 Window XP中安装 Excel2003的情况下,利用 VC++编
程实现语音朗读,在 Visual C++6.0中编译通过。此外,根据
用户要求也可以单独设置按钮,在需要的情况下对指定内容
朗读,实现起来快捷方便,而且丰富了系统功能,更加直观
贴近用户。
参考文献
[1]汪令江,周学文等. 奇思异想编程序 VC篇. 国防工业出
版社,2004.
[2]云舟工作室. 中文版Word2000 VBA 一册通. 人民邮电出
版社,2000.
作者简介
梁海珍,武警指挥学院,主要从事计算机教学与软件编程。
90- -