用C++Builder实现Word 97自动化

c++buider 轻松操作Word,Excel 通过OLE技术操作WORD,ECXEL,可以使你的软件具有更好的交互性。 立即下载

用C++Builder实现Word 97自动化
江西南昌华东交大控制信息
工程研究所(330013)刘遵雄


  ----要在应用程序中控制Word 97的运行,首先必须在编制自动化客户程序时使其头文件中包含文件ComObj.hpp,写入#include。编程工具C++Builder的开发者把调用Word 97自动化对象的功能大致包装成了几个Ole object class函数,应用程序设计人员可以很方便地利用它们。

 *设定Ole对象的属性:   
    OlePropertyGet(propname)
    OlePropertySet(propname,value)
  其中value是任何可以转换为Variant型的值


 *调用Ole对象的方法:   
    OleProcedure(OleProcName,[val,...])
    OleFunction(OleFuncName,[val,...])
   其中val是任何可以转换为Variant型的值


  ----可以通过OleFunction(OleFuncName,[val,...])父对象返回其子对象,句法是:子对象名=父对象名. OleFunction(OleFuncName,val)。而且可以对此方法组合从父对象返回其下层对象的对象。

  ---- C++Builder中使用OLE自动化控制Word 97,必须掌握Word 97的自动化对象及Microsoft Word Visual Basic帮助文件中关于Word的对象方法和属性。Word对象代表一个Word的元素,如文档、段落、书签或单个的字符。集合是一个对象,该对象包含其他数个对象,通常这些对象属于相同的类型,例如,一个集合对象中可包含文档中的所有书签对象。通过使用属性和方法,可以修改单个的对象,也可修改整个的对象集合。属性是对象的一个特性或者该对象操作的一个方面。例如,文档属性包含名称、内容、保存状态,以及是否启用修订。要更改一个对象的属性,可以修改属性的值。方法是对象可以进行的动作。

  ----代表Word 97应用程序的自动化对象有两个:Word.Application和Word.Basic,通过Application对象的WordBasic属性可以允许它们之间进行变换赋值。在C++Builder中通过CreateOleObject("…")就可启动Word并获得句柄,将其赋给Variant变量。如有两个Variant型变量V1和V2,WordBasic是Application对象的属性:
    V1=CreateOleObject("Word.Application");
    V2=V1.OleFunction("WordBasic")。


  ----以下通过一个简单的例子,具体说明如何在C++Builder中实现Word 97的自动化功能,其功能是打开或创建新文档,并向当前活动中发送文字、插入位图和画条直线等。在C++Builder集成开发环境IDE下,建立一项目Project1,其中包含Form1(其Caption为OLE Automation)的单元文件Unit1.cpp。表单Form1的OpenDialog1对象的Filter设为Word文档或位图。Unit1.cpp的头文件中必须包含"ComObj.hpp"。代码如下:
头文件Unit1.h代码为:

#ifndef Unit1H
#define Unit1H
//-------------
#include
#include
#include
#include
#include
#include
#include
//-------------
  class TForm1 : public TForm
{
__published:      // IDE-managed Components
    TButton*Button1;
    TOpenDialog*OpenDialog1;
    TButton*Button2;
    TMemo*Memo1;
    TBevel*Bevel1;
    TButton*Button3;
    TLabel*Label1;
    TButton*Button5;
    TBevel*Bevel2;
    TLabel*Label2;
    TLabel*Label3;
    void __fastcall Button1Click(TObject*Sender);
    void __fastcall Button3Click(TObject*Sender);
    void __fastcall Button2Click(TObject*Sender);
    void __fastcall Button5Click(TObject*Sender);
private:// User declarations
public:// User declarations
    Variant V,Vdocuments,Vdocument1,Vdocument2,Vactive;
 /*定义Variant型全局//变量,
分别指代Application对象, V的Documents
 对象, Vdocuments的Document对象
(Vdocument1,Vdocument2)以及
   V的ActiveDocument对象*/
    int tag; //用于记录Button3被点击的次数
    __fastcall TForm1(TComponent*Owner);
    Variant __fastcall GetWordObject();
    //获得Word 97自动化对象函数
    void __fastcall Add(int i);
    //编辑当前活动文档指定的
     段落文字的函数
};
//-------------
extern PACKAGE TForm1*Form1;
//-------------
#endif
Unit1.cpp文件代码为:
#include
#pragma hdrstop
#include "Unit1.h"
#include
//-------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1*Form1;
//-------------
__fastcall TForm1::TForm1(TComponent*Owner)
    : TForm(Owner)
{
tag=1;//令tag的初值为1,
  其将随Button3的点击次数而递增
}
//-------------
Variant __fastcall TForm1::GetWordObject()
{
Variant Obj1;
AnsiString AppName="Word.Application" ;
HWND hPrevApp = ::FindWindow(NULL,
                  "Microsoft Word");
 if(!hPrevApp)
 {
Obj1=CreateOleObject(AppName) ;
//Word没启动就启动它返回一自动化对象
 }
else  
Obj1=GetActiveOleObject(AppName);
 //否则返回正在运行的实例自动化对象
Obj1.OlePropertySet("Visible",true);
return Obj1;
  }
void __fastcall TForm1::Button1Click(TObject*Sender)
{
 int j;
V=GetWordObject();
  //获得Word 97自动化对象Application
Vdocuments=V.OleFunction("Documents");
 //通过Application获取Documents对象
if (OpenDialog1->Execute())
//使用Documents对象的Open方法
 打开文件,并返回Document对象
Vdocument1=Vdocuments.OleFunction
   ("Open",OpenDialog1->FileName);
j=Vdocument1.OleFunction("ComputeStatistics",2);
  //计算打开文档的页数
Label1->Caption="文件"+
 Vdocument1.OlePropertyGet("Name")
 +"页数是:"+IntToStr(j);
 }
//-------------
void __fastcall TForm1::Button3Click(TObject*Sender)
{
 int i,j;
 i=tag;
 Vactive=V.OleFunction("ActiveDocument");
 //获取Application的ActiveDocument对象
 j=Vactive.OleFunction("ComputeStatistics",4);
 //计算当前文档的段落数
 //的的Paragraphs集合对象增加一段
Vactive.OleFunction("Paragraphs").OleFunction("Add");
 i=j+i;//当前文档被编辑的段落序号
 Add(i);//调用编辑当前活动文档
       指定的段落文字的函数
 Memo1->Clear();//清除Memo1的内容
 tag=tag+1;
}
//--------------
void __fastcall TForm1::Button2Click(TObject*Sender)
{
V=GetWordObject();
Vdocuments=V.OleFunction("");
Vdocument2=Vdocuments.OleFunction("Add");
 //使用Documents对象的Add方法新建文档
Vdocument2.OlePropertySet("Password","12345");
  //设置新建文档的口令
}
//--------------
void __fastcall TForm1::Add(int i)
{
Variant V1;
//设置被编辑段的内容、字体大小、
  颜色及是否斜体
V1=((Vactive.OleFunction("Paragraphs")).
    OleFunction("Item",i)).OleFunction("Range");
(V1.OleFunction("Font")).OlePropertySet("Italic",true);
(V1.OleFunction("Font")).OlePropertySet("Size",18);
(V1.OleFunction("Font")).OlePropertySet("ColorIndex",6);
(V1.OleFunction("Font")).OlePropertySet("Size",18);
 V1.OlePropertySet("Text",Memo1->Text);
}
//-------------
void __fastcall TForm1::Button5Click(TObject*Sender)
{
Variant Vshape,Vactive1,Vline;
Vactive1=V.OleFunction("ActiveDocument");
Vshape=Vactive1.OleFunction("Shapes");
//获取当前活动文档的Shapes对象
//使用Shapes对象的AddLine方法化直线
Vline=Vshape.OleFunction("AddLine",90,80,400,80);
if (OpenDialog1->Execute())
//使用Shapes对象的AddPicture
  方法插入指定位图
  Vshape.OleFunction("AddPicture",OpenDialog1
  ->FileName,50,50,80,100);
}


  ----此程序在C++Builder 3中编译通过,运行该应用
 程序首先必须获得文档,然后才可以编辑文档。

Delphi2009/C++Builder2009 Updates(SP1+SP2) Codegear RAD Studio 2009 更新包 立即下载

相关推荐

C++ builder 2009实现获取IP地址

C++ builder 2009 获取IP地址并上报到指定FTP空间程序源代码。

c++ 将文件内容输出到word上_Excel向Word输出复杂图文

之前写过一篇如如何把Excel数据按格式输出至Word,有很多朋友提到了可以使用邮件合并功能。确实,简单的输出,完全没必要使用VBA,毕竟这个重器并不那么友好。后来有朋友提出了,需要把图片按格式输出至Word,于是才有了今天这个文章。我们先来看看具体的需求场景。以工程建设为例,某些工程验收时候都需要附验收图片,如下图这种,就需要把图片输出至指定的位置。第一、建立模板这里比较关键的是图片部分,文字替...

weixin_32328999的博客 1086

C++实现把表的数据导出到EXCEL并打印实例代码

实现把表的数据导出到EXCEL并打印实例代码 首先加入这两句: #include utilcls.h #include comobj.hpp 下面正式开始: void __fastcall TMainForm::ToExcel(TADOQuery *TT,AnsiString str) {//TT为被导出数据的表,str为命令(具体看代码底部的if语句) #define PG OlePropertyGet #define PS OlePropertySet #define FN OleFunction #define PR OleProcedure Variant

C++ 自动化操作Word

本文事例工程源码面积分下载地址:http://download.csdn.net/detail/zy_dreamer/5321760 介绍: 这个事例演示了如何写C++代码来创建并操作一个Microsoft Word实例,创建一个新文档,插入一个段落,保存文档,关闭Word程序并清理使用的COM资源。 利用VC++实现有三种基本方法: 1.使用#import指令和智能指针操作Word

白话机器学习 6776

VC之Office自动化开发

<br /><br />去年底老板临时交给一个任务,为一个试验数据管理系统编写一个电子报告生成程序。因为老板也不怎么重视这个项目(钱少啊,呵呵),所以这个任务只好落在我这种小硕身上了。我也是两眼瞎,万事从头干。三个月的苦斗,还算圆满交差。用VC进行office自动化开发,网上有很多文章,我本不想在此画蛇添足。只是感于自己查资料时的苦痛,所以就厚着脸皮把一些心得拿出来见见阳光,有一些技术还是自己摸索出来的。最后,office自动化开发与我专业无丁点关系,希望此文不至于太班门弄斧让你看得难堪,如果尚有所帮助,那

Augusdi的专栏 2871

利用C++BuilderOLE自动化功能实现调用Word进行报表制作

利用C++BuilderOLE自动化功能实现调用Word进行报表制作一、概述  在我们利用C++Builder进行报表设计和打印处理时,我们往往是用C++Builder自己所提供的QReport组件页中的组件进行报表的设计和输出。但这样输出的表格都是事先设计好,并且不容易修改的表格,在系统移植后和需要对表格进行修改时就显得非常麻烦。那么,有什么好的解决方法来实现既可以自动生成报表,同时有能

ktcserver的专栏 5840

[C++] 用 C++ Builder 实现 Word 97 自动化

用C++Builder实现Word 97自动化  ----要在应用程序中控制Word 97的运行,首先必须在编制自动化客户程序时使其头文件中包含文件ComObj.hpp,写入#include。编程工具C++Builder的开发者把调用Word 97自动化对象的功能大致包装成了几个Ole object class函数,应用程序设计人员可以很方便地利用它们。 *设定Ole对象的属性:     

shine的现在进行时 1523

用C++Builder实现Word 97自动化 (转)

用C++Builder实现Word 97自动化 (转)[@more@]用C++Builder实现word 97自动化江西南昌华东交大控制信息工程研究所(330013)刘遵雄 ----要在应用程序中控制Word 97的运行,...

csd3176的博客 135

bcb实 现Word 97 自 动 化

  ---- 要 在 应 用 程 序 中 控 制Word 97的 运 行, 首 先 必 须 在 编 制 自 动 化 客 户 程 序 时 使 其 头 文 件中 包 含 文 件ComObj.hpp, 写 入 #include 。 编 程 工具C + + Builder 的 开 发 者 把 调 用Word 97 自 动 化 对 象 的 功 能 大致 包 装 成 了 几 个Ole object class

fleamboy的专栏 1069

利用C++Builder 6 中OLE自动化功能实现调用Word进行报表制作

利用C++Builder 6 中OLE自动化功能实现调用Word进行报表制作本文为原有篇幅在CB6下编写代码的补充,CB5下开发可以参考原有文章一、概述  在我们利用C++Builder进行报表设计和打印处理时,我们往往是用C++Builder自己所提供的QReport组件页中的组件进行报表的设计和输出。但这样输出的表格都是事先设计好,并且不容易修改的表格,在系统移植后和需要对表格进行修改时就

ktcserver的专栏 4351

利用C++BuilderOLE自动化功能实现调用Word进行报表制作 (转)

利用C++BuilderOLE自动化功能实现调用Word进行报表制作 (转)[@more@]利用C++BuilderOLE自动化功能实现调用word进行报表制作 一、概述  在我们利用C++Builder进行报表设计和...

ciya3282的博客 303

OfficeViewer

文件名称: Office-Viewer-OCX下载  收藏√  [  5  4  3  2  1 ]   所属分类: ActiveX-DCOM-ATL   开发工具: Visual C++   文件大小: 1899 KB   上传时间: 2013-10-17   下载次数: 47   提 供 者: 毛振宇  详细说明:1、利用

autumn20080101的专栏 1087

Qwen3.7-Max:生产级智能体的三层自治能力解析

智能体(Agent)是大模型从‘回答问题’迈向‘执行任务’的关键范式,其核心在于任务闭环能力——即自主规划、工具调用与异常恢复的有机统一。Qwen3.7-Max并非简单升级参数规模,而是通过原生化工具嵌入、动态MCP决策树与跨框架语义同构三大技术突破,实现从单次响应到多步自治的本质跃迁。它在Terminal Bench2.0-Terminus和SWE-Pro等真实终端与软件工程场景中验证了高鲁棒性与低错误率,显著优于传统插件式Agent架构。本文聚焦其底层行为逻辑,揭示其如何将Linux命令、API调用、代

HJ921004的博客 510
上一篇: 虚拟设备驱动程序的设计与实现
下一篇: DirectX5.0最新游戏编程指南
holyfire
博客等级 码龄26年 21粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值