CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

在提一问,大家不要烦我哦:)

楼主baal_zf((西狂))2004-09-04 18:12:17 在 C++ Builder / 基础类 提问

用OLE打开一个word文档时,怎样知道它共有多少页?  
  如果用程序控制跳转到指定页,怎么做?  
  希望各位大虾帮忙指教。最好能用源代码指教:) 问题点数:200、回复次数:5Top

1 楼binbin(破坏分子)回复于 2004-09-04 19:29:27 得分 20

没试过,搬个凳子听课.Top

2 楼weill(每天提一问,一天学一点)回复于 2004-09-04 20:12:44 得分 20

咯咯……偶也来听……  
  Top

3 楼hailin10(虎子)回复于 2004-09-04 20:29:39 得分 20

我也在搞这个,关注Top

4 楼raid79(山鹰)回复于 2004-09-04 21:52:59 得分 20

不知道怎么做  
  帮你顶Top

5 楼sunliwen780502(孙立文)回复于 2004-09-04 21:53:43 得分 120

我把以前ccrun整理的文章发出来,供参考!  
  ----   要在应用程序中控制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为OLEAutomation)的单元文件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);  
  }  
  Top

相关问题

  • 再提一问,新手不要笑
  • sql提问,问题比较麻烦
  • 出大问题了,麻烦斑竹不要删了这帖,过几天再删
  • 第一次来ASP提问题,千万不要打击我?
  • 我试试在这儿提问要不要减分啊。。。
  • 菜鸟提问:SDK 是什么西西 ?(不要砸砖头^_^)
  • 提个弱一点的问题,请各位不要见笑?
  • 一个简单的提问,希望大家不要见笑...
  • 新手提问,麻烦大家了~~~~
  • 一个简单的问题(菜鸟提问请不要嘲笑哦)

关键词

  • word
  • 自动化
  • 文档
  • 文件
  • application
  • vdocument
  • olefunction
  • olefuncname
  • wordbasic
  • c++builder

得分解答快速导航

  • 帖主:baal_zf
  • binbin
  • weill
  • hailin10
  • raid79
  • sunliwen780502

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo