`
isiqi
  • 浏览: 16585821 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多

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


----要在应用程序中控制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中编译通过,运行该应用
程序首先必须获得文档,然后才可以编辑文档。

分享到:
评论

相关推荐

    用bcb实现Word97自动化,用bcb实现Word97自动化

    本篇文章将详细介绍如何使用Borland C++ Builder(简称BCB)来实现对Microsoft Word 97的自动化操作。通过这一技术,用户能够在自己的应用程序中控制Word 97的各种功能,如打开文档、编辑文本、插入图片等。 #### ...

    操作Word,内容丰富,解析全面!!含源码,直接可用!!c++builder精彩编程!

    总的来说,这个压缩包提供的资源对于想用C++Builder进行Word自动化操作的开发者来说是一份宝贵的资料。源码可以直接运行和学习,有助于快速掌握相关的编程技巧。通过深入研究这些示例,你可以了解如何利用C++Builder...

    c++Builder 操作Excel (word文档)

    本文档主要讲述了使用 C++Builder 操作 Excel 的方法和技术,包括如何使用自动化对象、属性和方法来控制 Excel 的行为。下面是本文档的详细知识点: 1. 包含头文件:在使用 C++Builder 操作 Excel 之前,需要包含 ...

    c++builder调用word

    本文将详细探讨如何在C++Builder中调用Microsoft Word来处理文档,包括打开、编辑、保存和自动化操作等常见任务。这个过程通常涉及到Windows API调用、COM(组件对象模型)接口以及可能的第三方库。 首先,我们需要...

    c++buider 轻松操作Word,Excel

    此外,C++Builder的VCL库还提供了其他的类和方法来帮助你更好地管理OLE对象,例如`TOleServer`和`TOleClientSite`,以及`COleDispatchDriver`类,它们可以帮助你更方便地调用Word和Excel的自动化接口。 总之,通过...

    c++调用wps操作word excel ppt.7z

    在某些情况下,我们可能需要在C++程序中直接调用WPS的功能来自动化办公任务,例如批量处理文档、报表生成等。本项目提供了一种解决方案,即通过C++封装WPS的COM接口来实现对Word、Excel和PowerPoint的操作。 COM...

    C++ Builder窗体自定义消息框,替换自带ShowMessage对话框,解决ShowMessage字体小不够大的问题。自适应长文本消息、多行文本消息。

    在C++ Builder编程环境中,开发人员常常会遇到需要向用户显示信息的情况,此时通常会使用内置的`ShowMessage`函数。然而,`ShowMessage`的默认设置可能存在一些限制,例如字体大小固定,对于长文本或多行文本显示不...

    C++Builder6教程.pdf

    开发者使用C++语言在C++Builder环境中构建高质量的软件应用程序,这与用母语在Word上撰写文章相似。C++Builder不仅提供了基础的编程功能,还融入了面向对象编程的核心理念,如封装、继承和多态,使得开发者能够构建...

    C++Builder制作报表的两种实用方法

    根据给定的信息,本文将详细介绍使用C++Builder制作报表的两种实用方法,即使用TQuickReport组件制作报表和利用OLE自动化功能调用Microsoft Word进行报表制作。这两种方法各有优势,适用于不同的场景。 ### 1. 使用...

    cbuilder用wordapplicaqtion 生成word时的问题

    通过使用这个控件,开发者可以实现自动化的文档生成任务,这对于需要频繁生成报告或文档的应用场景非常有用。 #### 2. 遇到的问题:Word 连接中断 在使用 `WordApplication` 控件的过程中,可能会遇到一个常见的...

    cbuilder生成word表格源码

    此过程涉及到了 Office 自动化、OLE 对象操作以及 C++ 编程技术的应用。 ### 核心知识点 #### 1. **初始化 Word 应用程序** 首先,通过 `CreateObject` 方法创建一个 Word 应用对象。如果用户没有安装 Word,将会...

    C++Builder精彩编程实例集锦的源代码(1,2,3部分).rar

    C++Builder精彩编程实例集锦的源代码(1,2,3部分): 第一部分 界面设计 实例001 如何实现程序闪屏效果 实例002 如何实现程序窗口闪烁 实例003 如何制作吸附窗口程序 实例004 如何制作透明程序窗口 实例005 如何...

    应用OLE技术实现遥测数据处理结果报告自动化生成.pdf

    而C++Builder作为自动化控制器,通过编程向Word提交命令并实现数据交换。Word作为一个功能强大的COM组件,能够被编程调用,方便地在文档中插入和操作各种对象,从而实现自动化报告生成的功能。 文章的引言部分还...

    FastReport VCL 5 for RAD Studio, Delphi, C++Builder 10 Seattle

    FastReport VCL 5是一款强大的报表生成工具,专为RAD Studio、Delphi和C++Builder 10 Seattle用户设计。这个版本的FastReport提供了一系列先进的报告设计和开发功能,极大地提升了开发人员在创建、编辑和分发报表时...

    C++Builder精彩编程实例集锦的源代码后3部分.rar

    实例222 如何使用SQL Builder工具创建SQL语句 实例223 如何在程序运行时指定SQL语句 实例224 如何在程序中创建并使用数据库 实例225 如何在程序中控制与数据库的连接 实例226 如何在程序中创建Access数据库ODBC...

    基于VB的WORD试验报告的自动生成

    文献中的方法主要对比了不同的编程语言,如LabView、Delphi、Visual C++、Power Builder等,它们通过ActiveX自动化、OLE对象模型和Word邮件合并等功能生成Word报告。然而,这些方法涉及大量控件和底层函数,实现过程...

    利用OLE制作的WORD打印付申请的DLL

    标题中的“利用OLE制作的WORD打印付申请的DLL”指的是使用OLE(Object Linking and Embedding)技术创建的一个动态链接库(DLL),该DLL主要用于在C++Builder6环境下实现Word文档的自动化操作,特别是用于打印付款...

    C++Builder精彩编程实例集锦的源代码前3部分.rar

    实例222 如何使用SQL Builder工具创建SQL语句 实例223 如何在程序运行时指定SQL语句 实例224 如何在程序中创建并使用数据库 实例225 如何在程序中控制与数据库的连接 实例226 如何在程序中创建Access数据库ODBC...

Global site tag (gtag.js) - Google Analytics