从数据库输出word报表


2008-04-30 18:28


(程序4)
  要充分利用Word的自动服务功能,则必须对Word的对象模型有较为深入的了解,Wo
rd
对象模型中有一系列属于Application的对象和集合。以下示例程序均是用VB或VBA语言

编写的。
  (1)Application对象代表Word应用程序,包括可以返回最高一级对象的属性和方法

例如ActiveDocument属性可以返回Document对象。在使用可返回最普通的用户界面对象

许多属性和方法(比如活动文档,即ActiveDocument属性)时,可不必用Application对

象进行区分。例如,可写成ActiveDocument.PrintOut,而不必写成
Application.ActiveDocument.PrintOut。使用时不受Application对象限制的属性和方

被看作是“共用”的。Application对象的方法有Move、OnTime、Quit、Run等,属性有

ActiveDocument、ActivePrinter、caption、Documents、FontName、Path、visible、

WindowState、WordBasic等。
  (2)Documents对象是由Word当前打开的所有Document对象所组成的集合,下列示例

显示各打开文档的名称:
 

For Each aDoc In Documents      
   aName = aName & aDoc.Name & vbCr      
  Next aDoc      
  MsgBox aName


  用Add方法可以创建新的空文档,并将其添加到Documents集合中。用Open方法可以

打开文档。用Documents(index)可以返回单个的Document对象,其中的index是文档的名

称或索引序号。下面的语句用来关闭Report.doc文档,并且不保存所作的修改:
  Documents("Report.doc").CloseSaveChanges:=wdAppDoNotSaveChanges
  索引序号代表文档在Documents集合中的位置,例如Documents(1).Activate是代表

活Documents集合中的第一个文档,但建议使用Documents("Report.doc")这样的显式引
用,
这样可以使可读性强,而且不易出错。
  (3)Document对象代表一篇文档,Document对象是Documents集合中的一个元素。
Documents集合包含Word当前打开的所有Document对象。
  可用ActiveDocument属性引用处于活动状态的文档。下列示例是用Activate方法激

名为Document1的文档,然后将页面方向设置为横向并打印该文档:
 

Documents("Document1").Activate      
  ActiveDocument.PageSetup.Orientation = wdAppOrientLandscape      
  ActiveDocument.PrintOut


  它的方法和属性各有数十个,不过常用的并不多,如Range、Save、SaveAs、Prote
ct、
Close、Goto、Unprotect等方法和ActiveWindow、FullName、HasPassWord、Name、Pag
eSetup、
Password、Path、ReadOnly、Saved、SaveFormat等属性。
  (4)Selection对象代表一个窗格中的选定内容,该选定内容可以包括文档中的一个

域,也可以仅包括插入点。可用Information属性返回有关选定内容的信息:
  If Selection.Information(wdAppWithInTable) = True Then...
  也可用Select方法选定文档中的一个项目,下例是选定活动文档中的第一个书签并

其显示为红色:
  

If ActiveDocument.Bookmarks.Count >= 1 Then      
   ActiveDocument.Bookmarks(1).Select      
   Selection.Font.ColorIndex = wdAppRed      
  End If


  Selection对象还包括几种用于扩展或移动当前选定内容的方法,例如,可以将Mov
eDown
方法的Extend参数设为wdAppExtend。下例在活动窗口中选定接下的三段:
  

.StartOf Unit:=wdAppParagraph, Extend:=wdAppMove      
  .MoveDown Unit:=wdAppParagraph, Count:=3, Extend:=wdAppExtend      
  End With


  记录宏时,宏记录器经常将变化记录到Selection对象中。下例中宏将文档的起始两

词设为加粗格式并新添加一段:
 

Selection.HomeKey Unit:=wdAppStory      
  Selection.MoveRight Unit:=wdAppWord, Count:=2, Extend:=wdAppExtend      
  Selection.Font.Bold = wdAppToggle      
  Selection.MoveRight Unit:=wdAppCharacter, Count:=1      
  Selection.TypeParagraph


  下例完成与上例相同的操作,但不使用Selection对象:
 

Set myRange = ActiveDocument.Range(Start:=0,_      
   End:=ActiveDocument.Words(2).End)      
  myRange.Bold = True      
  myRange.InsertParagraphAfter


  每个窗格中只能有一个Selection对象,但在一个文档中可以有多个Range对象。一

Range对象代表文档中一个已选定或未选定的范围,用Range对象可以很方便地对文档进

操作。
  (5)Range对象代表文档中的一个范围,每一个Range对象由一个起始位置字符和一个

终止位置字符定义,下例返回代表活动文档前10个字符的Range对象:
  Set myRange = ActiveDocument.Range(Start:=0, End:=10)
  (6)Table对象代表一张表格,它是Tables集合的一个成员。该集合包含指定的选定

容、范围或文档中的所有表格。可以使用Tables(index)返回一个Table对象,其中inde
x
为索引序号,代表表格在选定内容、范围或文档中的位置,下例是将活动文档中的第一
张表
格转换为文本:
  ActiveDocument.Tables(1).ConvertToText Separator:=wdAppSeparateByTabs
  使用Add方法可以在指定范围内添加表格。下例在活动文档的起始处添加一张3行x4

列的表格:
  Set myRange = ActiveDocument.Range(Start:=0, End:=0)
  ActiveDocument.Tables.Add Range:=myRange, NumRows:=3, NumColumns:=4
  (7)Goto方法是一个很有用的方法,对于Document或Range对象而言,此方法返回一

个Range对象,该对象代表指定项(例如页、书签或域)的开始位置。对于Selection对
象,
将插入点移动到指定项前面的字符位置。下面的示例将所选内容移动到文档中的第四行

  Selection.GoTo What:=wdAppGoToLine, Which:=wdAppGoToAbsolute, Count:=4
  下面的示例将所选内容向上移动两行:
  Selection.GoTo What:=wdAppGoToLine, Which:=wdAppGoToPrevious, Count:=2
  下面的示例将所选内容移动到下一个表格的第一个单元格:
  Selection.GoTo What:=wdAppGoToTable, Which:=wdAppGoToNext
  程序5是综合处理的例子,它显示如何对既有文本又有图表的文档进行定位;
  Sub ShowCellName()
  '打印出每个单元格的名字
 

Set newdAppoc = ActiveDocument      
  Set myTable = newdAppoc.Tables(1)      
  i = 1      
  For Each c In myTable.Range.Cells      
   c.Range.InsertAfter "Cell " & i      
   i = i + 1      
  Next c


  '单元格定位及合并,注意单元格的引用
 

Set myTable = ActiveDocument.Tables(1)      
  Set myRange = ActiveDocument.Range(myTable.cell(1, 2).Range.Start,      
  myTable.cell(1, 3).Range.End)      
  myRange.Cells.Merge


  '插入点的定位,绝对定位至Tables(1).cells(1,1)
  

Selection.GoTo What:=wdAppGoToTable, Which:=wdAppGoToAbsolute, Count:=1      
  End Sub


  (程序5)
  下面的例子是查看插入点的位置:
 

if Selection.Information(wdAppWithInTable)      
  Then Selection.Tables(1).Select


  如果所选的内容位于一个表格中,则本示例选定该表格。
  6.建议
  (1)在使用别的开发语言操纵word进行自动服务之前,请先多多使用Word VBA,以便

熟悉Word的对象模型。因为它的在线提示功能非常有用,并且查阅Visual Basic参考资

也很方便。
  (2)Word对象模型的文档包含在Microsoft Word Visual Basic Reference(VBAWRD8
.HLP)
帮助文件中,在典型的Office安装过程中,该文件不被安装,但可以在定制安装过程中

择安装它。该文档是很有用的参考,但不能指望仅仅依靠该文档来掌握Word的对象模型

特别是对于初学者而言,更多的应该是进行思考和验证。