VC之Office自动化开发(二)

 
 

1  Word组件对象模型  
Microsoft Office Word 2003 对象是按层次顺序排列的,层次结构顶端的两个主类是 Application 类和 Document 类。这两个类非常重要,因为在大部分时间里,您要么是在使用 Word 应用程序本身,要么是以某种方式处理 Word 文档。Word 对象模型严格遵循用户界面。Application 对象提供整个应用程序的包装,每个 Document 对象表示单个 Word 文档。这些对象各自都有很多方法和属性,您可以使用这些方法和属性操作对象或与对象交互。
Application 对象。Application 对象表示 Word 应用程序,是其他所有对象的父级。它的所有成员通常作为一个整体应用于 Word。可以使用该对象的属性和方法来控制 Word 环境。
Document 对象。Document 对象是 Word 编程的中枢。当您打开文档或创建新文档时,就创建了新的 Document 对象,该对象被添加到 Word 的 Documents 集合中。焦点所在的文档叫做活动文档,由 Application 对象的 ActiveDocument 属性表示。
Selection 对象。Selection 对象表示当前选择的区域,Selection 对象只存在一个。在 Word 用户界面中执行某项操作(例如,对文本进行加粗)时,应首先选择或突出显示文本,然后应用格式设置。Selection 对象始终存在于文档中。如果未选中任何对象,它表示插入点。此外,该对象还可以表示多个不连续的文本块。
Range 对象。Range 对象表示文档中的一个连续的区域,由一个起始字符位置和一个结束字符位置定义。Range 对象的数量并不局限于一个。您可以在同一文档中定义多个 Range 对象。
Bookmark 对象。Bookmark 对象与 Range 对象类似,它也表示文档中的一个连续区域,并具有一个起始位置和一个结束位置。书签用于在文档中标记一个位置,或者用作文档中的文本容器。Bookmark 对象可以小到只有一个插入点,也可以大到整篇文档。您还可以在文档中定义多个书签。
对于Microsoft Office Word 2003,通常可以在..//Microsoft Office//OFFICE11// MSWORD.OLB获得相关接口类。常用的有_Application, Documents, _Document, Selection, Range等。此外,用于设置字体的_Font,段落格式的_ParagraphFormat,表格对象Tables及Table,目录对象TablesOfContents及TableOfContents等等也是常用的。

2  Word启动与退出    
使用Application 对象,关联接口、释放接口。具体代码如下:
_Application theExcelApp;
theExcelApp.CreateDispatch("word.application", NULL); //关联接口
退出
theExcelApp.Quit();  退出
theExcelApp.ReleaseDispatch();  //释放接口

3   Word表格操作   
使用单文档对象_Document,表格集合对象Tables,表格对象Table,行对象Rows,单元格对象Cell,列集合对象Columns,列对象Column,区域对象Range等可对表格进行操作。
插入表格。使用_Document:: GetTables返回一个Tables对象,使用Tables::Add在指定区域插入一个表格。
获取列对象。使用Table:: GetColumns返回一个Columns对象,使用Columns:: Item返回一个Column对象。从而可以列为对象进行操作。
单元格插入文字。使用Table:: Cell返回Cell对象,使用Cell:: GetRange返回区域对象,或者使用Cell::Select使得表格获得输入焦点,从而进行编辑。

4  文字转换为表格   
当需要把一个记事本(*.txt)文件转换为表格插入到Word文档中。最快捷的作法是将txt内容粘贴到word文档中,然后将内容转化为表格。步骤如下:
首先确定一个插入txt内容的Range对象。
使用Range::InsertFile函数。InsertFile函数声明为:
   void Range::InsertFile(LPCTSTR FileName, VARIANT* Range, VARIANT* ConfirmConversions, VARIANT* Link, VARIANT* Attachment)
参数说明如下:
FileName 插入文本路径。
Range 插入文本内容的Range对象,设为NULL
ConfirmConversions 确认转换,设为FALSE
Link 链接到文件,设为FALSE
Attachment 链接行为,设为FALSE
使用Range:: ConvertToTable转换文字为表格,返回一个Table对象。ConvertToTable函数声明为:
LPDISPATCH Range::ConvertToTable(VARIANT* Separator, VARIANT* NumRows, VARIANT* NumColumns, VARIANT* InitialColumnWidth, VARIANT* Format, VARIANT* ApplyBorders, VARIANT* ApplyShading, VARIANT* ApplyFont, VARIANT* ApplyColor, VARIANT* ApplyHeadingRows, VARIANT* ApplyLastRow, VARIANT* ApplyFirstColumn, VARIANT* ApplyLastColumn, VARIANT* AutoFit, VARIANT*, VARIANT* DefaultTableBehavior)
参数说明如下:
Separator 分隔符。通常设为1,即设置制表符为分隔符(如果采用其他分隔符,请适当修改)
NumRows 表格行数目
NumColumns 列数目
InitialColumnWidth,Format,ApplyBorders,ApplyShading,ApplyFont,ApplyColor,ApplyBorders,ApplyFirstColumn,ApplyLastColumn, DefaultTableBehavior,均可设为VarOpt,由系统默认
AutoFit 自动调整。设为0
也可利用Selection对象代替Range对象进行文本转换表格,调用函数与Range对象的函数名称一致,参数略有出入。

5 设置页码      
通常我们需要在任意指定页开始插入新页码。网上很多文章都是只能在第二页开始设置。以下介绍我通过观察VBA宏代码得到的一种插入页码的方法(实现方法当然可能不止一种,我曾在网上看到曾有一篇文章提及这个问题,但是他的代码不能正常运行,估计是作者发布文章的时候有些不小心有遗漏)。要点在于插入分节符和取消,并且要注意返回当前节。步骤如下:
0 在前一页使用Selection::InsertBreak插入分节符,参数值为2(参数值7为分页符)。
1 使用_Document::GetActiveWindow返回窗口Window对象。
2 使用Window:: GetActivePane返回当前活动Pane窗格对象
3 使用Pane::GetView返回View视图对象,View::SetType(long(3))。
4 使用SetSeekView(long(10))获得页眉页脚视图。
5 使用Selection::GetHeaderFooter()获得页眉页脚对象HeaderFooter。
6 使用HeaderFooter::SetLinkToPrevious(FALSE)取消“与上一节相同”。
7此时输入较点Selction停留在上一节的页脚处。使用View::SetSeekView(long(0))将返回到当前节的文字视图中。
8 使用View::SetSeekView(long(10))再次获得本节的页眉页脚视图。
9 使用Selection::GetHeaderFooter()获得页眉页脚对象HeaderFooter。
10 使用HeaderFooter::GetRange获得Range对象rangeheadfoot。
11 使用Range:: GetFields获得Fields对象。
12使用Fields:: Add获得Field对象,具体参数赋值为Add(rangeheadfoot,COleVariant(short(33)),varOpt,varOpt)。
13 使用Fields::GetPageNumbers()获得PageNumbers页码对象。
14使用PageNumbers对象的方法设置属性。特别要设置SetStartingNumber(long(1))。
PageNumbers对象的其他设置可参考如下:
SetNumberStyle(long(0));
 SetHeadingLevelForChapter(long(0));
 SetIncludeChapterNumber(FALSE);
 SetChapterPageSeparator(long(0));
 SetRestartNumberingAtSection(true);
15 通过Range对象rangeheadfoot设置页码居中及文字大小。
16 结束页码设置。使用View::SetSeekView(long(0))返回到文字视图。

6 插入Excel图表   
在Excel生成图表后,Word可将其嵌入文档中并改变其格式。用户可以通过双击图表对象激活,然后进行类似于Excel环境下的操作。具体操作如下:
使用Selection:: GetInlineShapes。获得内嵌区域集合对象InlineShapes。
使用InlineShapes::AddOLEObject插入表格,并获得内嵌区域对象InlineShape。AddOLEObject函数声明为:
LPDISPATCH AddOLEObject(VARIANT* ClassType, VARIANT* FileName, VARIANT* LinkToFile, VARIANT* DisplayAsIcon, VARIANT* IconFileName, VARIANT* IconIndex, VARIANT* IconLabel, VARIANT* Range)
参数说明如下:
ClassType 插入类型,若为Excel对象,设为COleVariant("Excel.Sheet.8")。
FileName 文件路径。
LinkToFile 链接到文件。设为FALSE。
DisplayAsIcon 显示为图标,设为FALSE。
IconFileName 文件名图标,设为VarOpt。
IconIndex 索引图标,设为VarOpt。
IconLabel 标签图标,设为VarOpt。
Range 区域,设为VarOpt。
使用InlineShape的方法SetHeight、SetWidth调整大小。这些方法的参数值都是打印格式下的英磅数值。

7 生成目录    
单文档对象_Document,目录集合对象TablesOfContents,目录对象TableOfContents及Range对象。操作流程如下:
使用_Document:: GetTablesOfContents返回TablesOfContents对象。
TablesOfContents::Add返回TableOfContents对象。
LPDISPATCH TablesOfContents::Add(LPDISPATCH Range, VARIANT* UseHeadingStyles, VARIANT* UpperHeadingLevel, VARIANT* LowerHeadingLevel, VARIANT* UseFields, VARIANT* TableID, VARIANT* RightAlignPageNumbers, VARIANT* IncludePageNumbers, VARIANT* AddedStyles, VARIANT* UseHyperlinks, VARIANT* HidePageNumbersInWeb, VARIANT* UseOutlineLevels)
参数说明如下:
Range 插入目录的Range对象。通常目录是文档生成结束时进行插入的,因此必须事先指定插入目录的区域Range对象。
UseHeadingStyles 使用制表符前导符,设为TRUE
UpperHeadingLevel 顶级目录,通常设为1
LowerHeadingLevel 底级目录,根据需要赋值
UseFields 使用区域,设为FALSE
TableID 目录索引,以1起始
RightAlignPageNumbers 页码右对齐,设为TRUE
IncludePageNumbers 包含页码,
AddedStyles 增加类型,设为NULL
UseHyperlinks 使用超链接,设为TRUE
HidePageNumbersInWeb Web页中隐藏页码,设为TRUE
UseOutlineLevels 使用大纲级别,设为TRUE
使用TableOfContents:: GetRange获取区域对象,进行其他例如文字大小控制等操作。
TableOfContents:: UpdatePageNumbers更新页码。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值