使用VC编程来操纵Office。你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序......只要是Office能够实现的功能,都可以在你写的程序中调用。仔细阅读下面的说明,并下载源文件进行参考,你就可以一步一步地掌握这个技术。祝朋友们学习快乐。

    一、概念

Microsoft 的 Office 产品中,都提供了OLE Automation 自动化程序的接口。如果你使用VB,VBA 和 Script 脚本调用 Office 功能的话,其实比使用 VC 调用要简单的多。比如在 WORD 中,调出菜单“工具(T)宏(M)录制新宏(R)”,这时候它开始记录你在 WORD 中任何菜单和键盘的操作,把你的操作过程保存起来,以便再次重复调用。而保存这些操作的记录,其实就是使用了 VBA 程序(Visual Basic for Application)。而我们下面要实现的功能,也同样要参考 VBA 的方法。

    二、结构层次

为了更有逻辑,更有层次地操作 Office,Microsoft 把应用(Application)按逻辑功能划分为如下的树形结构

Application(WORD 为例,只列出一部分)

Documents(所有的文档)

Document(一个文档)

......

Templates(所有模板)

Template(一个模板)

......

Windows(所有窗口)

Window

Selection

View

Selection(编辑对象)

Font

Style

Range

......

......

只有了解了逻辑层次,我们才能正确的操纵 Office。举例来讲,如果给出一个VBScript语句是:

application.ActiveDocument.SaveAs "c:abc.doc"

那么,我们就知道了,这个操作的过程是:第一步,取得Application;第二步,从Application中取得ActiveDocument;第三步,调用 Document 的函数 SaveAs,参数是一个字符串型的文件名。

    三、基本步骤

(1)创建(或打开已有的)一个 MFC 的程序工程

(2)Ctrl+W 执行 ClassWizard(本文按照 VC6 操作,例子程序也是在VC6 下编写测试的)

(3)Add Class...From a type Library... 在 Office 目录中,找到你想使用的类型库。(我使用的是 Office2000,其Word 的类型库文件,保存在 C:Program FilesMicrosoft OfficeOfficeMSWORD9.OLB)根据你 Office 的版本,可以使用下表列出的类型库文件

Office 版本和类型 类型库文件 Office 版本和类型 类型库文件
Access 97 Msacc8.olb PowerPoint 2000 Msppt9.olb
Jet Database 3.5 DAO350.dll Word 2000 Msword9.olb
Binder 97 Msbdr8.olb Access 2002 Msacc.olb
Excel 97 Excel8.olb Excel 2002 Excel.exe
Graph 97 Graph8.olb Graph 2002 Graph.exe
Office 97 Mso97.dll Office 2002 MSO.dll
Outlook 97 Msoutl97.olb Outlook 2002 MSOutl.olb
PowerPoint 97 Msppt8.olb PowerPoint 2002 MSPpt.olb
Word 97 Msword8.olb Word 2002 MSWord.olb
Access 2000 Msacc9.olb Office Access 2003 Msacc.olb
Jet Database 3.51 DAO360.dll Office Excel 2003 Excel.exe
Binder 2000 Msbdr9.olb Graph 2003 Graph.exe
Excel 2000 Excel9.olb Office 2003 MSO.dll
Graph 2000 Graph9.olb Office Outlook 2003 MSOutl.olb
Office 2000 Mso9.dll Office PowerPoint 2003 MSPpt.olb
Outlook 2000 Msoutl9.olb Office Word 2003 MSWord.olb

(4)选择类型库文件后,在弹出的对话窗中继续选择要添加的类。具体选择什么类,要看你将来在程序中打算调用什么功能。当然,你也可以不用考虑这么多,用鼠标和Shift键配合,全部选择也可以。

(5)初始化COM。方法一,找到App的InitInstance()函数,在其中添加 AfxOleInit()函数的调用;方法二,在需要调用COM功能的地方 CoInitialize(NULL),调用完毕后 CoUninitialize()。

(6)在你需要调用 Office 功能函数的 cpp 文件中
    #include // 为了方便操作 VARIANT 类型变量,使用CComVariant 模板类
    #include "头文件.h"
    // 具体的头文件名,是由装载类型库的文件名决定的。(鼠标双点包装类的文件,就可以看到)
    // 比如使用 msword9.olb类型库,那么头文件是 msword9.h

(7)好了,现在开始写程序吧。另外要说明的是,步骤3和4,其实也可以使用 #import 方式引入类型库。

    四、实现技巧

在书写调用 Office 函数的过程中,最困难的是确定函数的参数,一般情况下,参数都是 VARIANT 类型的变量指针。那么到底具体我们应该怎么写那?推荐两个方法,其一是阅读有关 VBA 的书籍;其二,是使用 Office 中自带的“宏”功能。强烈推荐大家使用第二个方法,把你要完成的功能,在 Office 的操作环境中,用宏录制下来,然后观察分析录制后的函数和参数,就可以在 VC 中使用了。举一个例子:

ActiveDocument.SaveAs FileName:="Hello.doc", FileFormat:=wdFormatDocument _

, LockComments:=False, Password:="", AddToRecentFiles:=True, _

WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _

SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _

False

以上是在 Word 中录制的一个保存文件的宏,而在 VC 中对应的函数原型为 void _Document::SaveAs(VARIANT* FileName, VARIANT* FileFormat, VARIANT* LockComments,
VARIANT* Password, VARIANT* AddToRecentFiles, VARIANT* WritePassword,
VARIANT* ReadOnlyRecommended, VARIANT* EmbedTrueTypeFonts, VARIANT* SaveNativePictureFormat,
VARIANT* SaveFormsData, VARIANT* SaveAsAOCELetter)

分析对照后,我们就能看出,参数 FileName 是字符串 VARIANT(VT_BSTR),参数 LockComments 是布尔VARIANT(VT_BOOL),等等。参数 FileFormat := wdFormatDocument 是什么类型那?其实这是一个表示保存的时候指定文件类型的常量,而且显然是 DWORD 类型VARIANT(VT_I4)。那么常量的数值又是多少那?很简单,写一个宏,调用函数 MsgBox 显示一下不就都知道啦?!

    五、步步为营

特别提示一:编译执行前,一定要先关闭 KV 实时监视病毒的功能(KV 的程序会干扰我们的调用,瑞星的则没关系)。

特别提示二:在例子程序中,为了表现程序的关键部分,没有或很少使用了条件判断。为了实现你程序的健壮性,请自己加上条件判断和异常处理。

Step1:如何启动和关闭 WORD,及 VARIANT 的最基本的使用方法

Step2:和 Step1 同样功能,用 CComVariant 改进了 VARIANT 的使用方式

Step3:在 Step2 的基础上,新建一个 WORD 文档,并从程序中传送一些字符到 WORD

Step4:在 Step3 的基础上,保存 WORD 文档

Step5:一个小应用举例,把输入的汉字按照“笔画”排序

Step6:一个小应用举例,盗窃正在使用的 WORD 文档

以上这6个小程序中,都有详细的注释。大家阅读后慢慢体会并实验,你就可以自由地操纵任何一个 Office 啦。

VC编程来操纵Office相关推荐

  1. 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次.docx...

    人工智能课内实验报告(8次)学 院: 自动化学院 班 级: 智能1501 姓 名: 刘少鹏(34) 学 号: 目 录课内实验1:猴子摘香蕉问题的VC编程实现--------1课内实验2:编程实现简单动 ...

  2. VC编程实现IE风格的界面

    使用过IE浏览器的朋友都知道IE界面上的扁平工具条.地址栏,扁平工具栏上的按钮正常状态下为扁平态,按钮上的图像为灰色,当鼠标放在按钮上时,按钮突 起(这种状态称为手柄),并且其上的图像变得鲜艳醒目,一 ...

  3. VC++编程中的文件操作API和CFile类

    VC++编程中的文件操作API和CFile类 在VC编程中,操作文件的方法主要有两种:利用API函数和MFC的CFile类.微软在其中封装了文件的一般操作,下面我就介绍一下如何利用这两种方法实现文件操 ...

  4. VC编程操作Word2010生成表格

    VC编程操作Word2010生成表格 1. 右键单击工程节点,然后选择添加类,如下图: 2. 添加TypeLib中的MFC类,如下图: 3. 选择文件,打开MSWORD.OLB, word2010的在 ...

  5. vc++ 编程 经典电子书

    完整版目录都在这里了:http://www.cctry.com/forum-46-1.html C.C++ 语言: 一个月挑战C++ http://www.cctry.com/thread-778-1 ...

  6. 大量C语言、C++、C#、VC编程相关书籍下载

    大量C语言.C++.C#.VC编程相关书籍下载 http://www.juntuan.net/dh/CYYdowmload.htm C语言 C语言编程宝典大全 C语言实例教程 1.72 C语言程序基础 ...

  7. 《实用VC编程之玩转控件》第1课:Windows编程简介

    本文转载自: VC驿站 https://www.cctry.com/thread-297374-1-1.html 0.开发环境: 操作系统:Microsoft Windows 7 Ultimate S ...

  8. VC编程工具的灵活使用实验报告

    <数据结构>实验一:      VC编程工具的灵活使用 一..实验目的 复习巩固VC编程环境的使用,以及C++模板设计. 1.回顾并掌握VC单文件结构程序设计过程. 2.回顾并掌握VC多文 ...

  9. VC编程实现色彩空间RGB与XYZ相互转换

    VC编程实现色彩空间RGB与XYZ相互转换 使 用过PhotoShop软件的朋友对色彩空间应该不会感到陌生,在PhotoShop中经常使用有RGB(红色.绿色.蓝色).CMYK(青色.洋红.黄 色.黑 ...

  10. 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次 -...

    人工智能课内实验报告 (8次) 学 院:自动化学院 班 级: 智能1501 姓 名: 刘少鹏(34) 学 号:06153034 目 录 课内实验1:猴子摘香蕉问题的VC编程实现????????1 课内 ...

最新文章

  1. java 正则 捕获_Java通过正则表达式捕获组中的文本
  2. 【自动驾驶】30.c++实现基于eigen实现欧拉角(RPY), 旋转矩阵, 旋转向量, 四元数之间的变换(附代码)
  3. python pandas dataframe 转json_python将相类不同key的json对象转化为pandas的dataframe(上篇)...
  4. 四种方式下创建线程启动的区别
  5. 巧用 Protobuf 反射来优化代码,拒做 PB Boy
  6. OpenVINO主要工作流程
  7. 流量和延迟减半!挑战 TiDB 跨数据中心难题
  8. 黄聪:Loopup集合类笔记
  9. 3D视觉创新方案分享:仓储VSLAM/商品三维重建/静态场景重建/表情识别等多个方向...
  10. 4.7 Observer(观察者)
  11. 车控APP发现安全隐患,研究人员模拟黑客入侵
  12. 深入学习smali语法
  13. 使用hector构图_如何使用均衡的构图拍摄更清晰的照片
  14. C++动态数组类模板
  15. 小米商城前端页面(静态)
  16. 单元格内容分列多行_excel拆分单元格内容 excel单元格拆分多行
  17. windows屏幕亮度调节失灵的解决方法
  18. linux arm关闭光栅,基于Linux的光栅检测系统的软件设计与实现.pdf
  19. [转]AP,mAP计算
  20. 钉钉 api 的 Nginx 代理配置

热门文章

  1. python 移动文件或文件夹操作
  2. 先进的分销管理系统(ADMS)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  3. MySQL分组求和GROUP BY
  4. 时延波束形成 matlab,有关波束形成程序解释
  5. 刚开始接触编程也能轻松写的计算器代码(VS2019)(c语言)
  6. ENSP实验五——三层交换机+二层交换机
  7. 毕业论文编辑器软件制作经历与思考1
  8. stm32f030移植到stm32f072
  9. 5G+北斗高精度定位系统适用于哪些行业领域?
  10. 2016中国app年度排行榜:十大行业、25个领域、Top 500 和2017趋势预测