前阵需要做这种东西,于是研究了一下,把个人的领悟说一说
Word支持使用VB脚本语言来做二次开发,就像Photoshop支持JavaScript,3DMAX支持MaxScript,等等。如果没有用过的同学,可以研究一下Word的”宏”功能。所谓的”宏”简单地说就是讲一系列的操作集合起来,让你按一下就完成。 用”宏”可以批量完成很多一样的工作,比如打开一堆文档并且将其中的某些文字替换成图片这样的操作。基本上只要是Word的功能都可以通过这个编程接口来调用。
比如说我们来做一个这样的宏:打开我的文档中的”信息.doc”,在文档的末尾加一个表格,然后保存为”信息副本.doc”。 首先打开一个空文档,单击”工具”-”宏”-”录制新宏”,这时Word就会弹出一个小的浮动工具条(有时候没有)开始记录你的动作,那么我们现在就按照正常步骤打开文件,插入表格,再保存。这时单击那个浮动工具条上的停止按钮,一个宏就录制好了。 要播放这个宏,可以选择工具-宏-宏来运行。这时点击工具-宏-Visual basic 编辑器,就可以看到刚才录制的代码,可能是这个样子的:
Sub Macro2()
‘ ‘ Macro2 Macro ‘ 宏在 2008-11-13 由 USER 录制 ‘
ChangeFileOpenDirectory “E:\My Documents\文档\”
Documents.Open FileName:=”编译原理.doc”, ConfirmConversions:=False, ReadOnly:= _ False, AddToRecentFiles:=False, PasswordDocument:=”", PasswordTemplate:= _ “”, Revert:=False, WritePasswordDocument:=”", WritePasswordTemplate:=”", _ Format:=wdOpenFormatAuto, XMLTransform:=”"
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _ 5, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _ wdAutoFitFixed
With Selection.Tables(1)
If .Style <> “网格型” Then
.Style = “网格型”
End If
.ApplyStyleHeadingRows = True .ApplyStyleLastRow = True .ApplyStyleFirstColumn = True .ApplyStyleLastColumn = True
End
With ChangeFileOpenDirectory “E:\My Documents\” ActiveDocument.SaveAs FileName:=”编译原理.doc”, FileFormat:=wdFormatDocument, _ LockComments:=False, Password:=”", AddToRecentFiles:=True, WritePassword _ :=”", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _ SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _ False End Sub
这是记录下来的,有很多冗余,如果是我们自己编写,可以简化为如下代码:
Application.Documents.Open FileName:=”编译原理.doc”
‘这句话是在”Documents”集合中用Open方法打开一个新文档,新文档会添加到”Documents”集合中
Application.Selection.GoTo What:=wdGoToPercent, Count:=100
‘这句话是把光标定位到文档末尾
Application.ActiveDocument.Tables.Add Range:=Selection.Range, Row:=2, Column:=5
‘这句话是在添加一个表格
Application.ActiveDocument.SaveAs FileName:=”编译原理副本.doc”
‘这句就是另存为啦
在Delphi中调用Word,就要通过Word的编程接口,用VB代码来调用Word的功能。微软实现的方法是OLE对象编程。通过在内存中建立一个Word对象,来执行操作。 比如说在Delphi中打开Word,就是如下代码:
procedure StartWord;
var
FWord:OleVariant;
begin
try
FWord:=GetActiveOleObject(‘Word.Application’);
except
FWord:=CreateOleObject(‘Word.Application’);
end;
FWord.Visible:=True;
end;
这时就会打开一个Word窗口,这个时候,FWord变量,就是上面vb代码中的Application变量,代表Word本身。接下来只要把vb代码作适当的更改后抄进去就行了。 比如打开文档就是:
FWord.Documents.Open(FileName:=’编译原理.doc’);
这种方法的好处是可以使用Word在vb编辑器里面提供的所有功能,并且所有的方法,属性,对象信息都可以在Word的帮助中找到。缺点是因为是直接对Word对象操作,而不是调用Delphi提供的方法,所以在代码编辑器里面输入了”.”后不会自动提示成员函数和属性。