一、有关环境问题
针对Word开发的软件,不仅要自己电脑上可以用,应该在其他机器上也可以用。从引用开始,就面临了使用环境的版本问题。
解决之道,就是可以引用,借用提示,便于编写,但是最后生成,一定要从创建对象开始,而不是从引用对象来开始。
网上有很多Word的类,可以借鉴,但是最好用到一条测试一条。所以我也拆开了一条条说明,而不是完整代码。
创建一个类 myword
声明一个Word应用对象,并实例化。
Public oWordApplic As Object
oWordApplic = CreateObject("Word.Application")
其后所有对象的引用都从oWordApplic开始形成完整路径。比如:
当前文档的所有段落集合:oWordApplic.ActiveDocument.Paragraphs()
二、关闭的问题
网上有一堆代码,其实关键的问题就是检测当前创建的应用中是否有活动对象存在。如果有,文档关闭,后面就是是否保存的事情,没有,直接退出应用即可。
oWordApplic.documents.count >=1 就是有活动文档存在。依据此你可以直接定义一个判断函数,比如:
Public Function checkDoc() As Boolean
这个判断方式,居然很少见。
三、如何使用VBA代码
vb.net操作Word有天然的优势,就是和VBA的相似度极高,很多代码可以直接使用,但是要注意两个问题:
1、代码的格式。
2、常量字符的使用。
代码格式问题,我基本是靠猜,呵呵,反正就是试验几次就好了。
VBA中使用的字符常量,要在VBA里面输出,看看到底值是多少,msgbox(某个常量字符),然后我们就直接使用这个值。
四、给出一些具体的代码
1、插入一张图片
Public Sub insertPic(ByVal picstr As String)
oWordApplic.Selection.InlineShapes.AddPicture(FileName:=picstr, LinkToFile:=False, SaveWithDocument:=True) '插入图片
End Sub
这个效果和Word里面工具栏-插入-图片意思一样,尺寸不管,格式不管。
2、插入指定图片后指定尺寸、浮与文字上方,控制旋转角度。
Public Sub insertFloatPic(ByVal imgStr As String, Optional ByVal w As Integer = 110, Optional ByVal h As Integer = 110, Optional ByVal angle As Integer = 0)
With oWordApplic
Dim shapeW As Integer
shapeW = w '定义图片尺寸
Dim shapeH As Integer
shapeH = h
Dim myShape As Object
Dim MyInshape As Object
'插入一个嵌入式图片对象
MyInshape = .Selection.InlineShapes.AddPicture(FileName:=imgStr, _
LinkToFile:=False, SaveWithDocument:=True)
MyInshape.Width = shapeW
MyInshape.Height = shapeH
'将InlineShape对象转变为Shape对象
myShape = MyInshape.ConvertToShape
myShape.Width = shapeW
myShape.Height = shapeH
myShape.IncrementRotation(angle)
'使图片浮于文字上方
myShape.WrapFormat.Type = 3
End With
End Sub
3、遍历段落
声明一个段落对象
Dim para As Object = oWordApplic.ActiveDocument.Paragraph
遍历段落
For Each para In oWordApplic.ActiveDocument.Paragraphs()
'获取段落文本
Dim rangeStr As String = para.range.text
Next
演示1:删除空白段落
Public Sub 删除空白段落()
Dim para As Object = oWordApplic.ActiveDocument.Paragraph
For Each para In oWordApplic.ActiveDocument.Paragraphs()
Dim rangeStr As String = para.range.text
If Len(rangeStr) = 1 Or Right(rangeStr, 2) = " " & Chr(13) Then para.Range.Characters.Last.Delete()
Next
End Sub
演示2:设置段落标题级别
声明大纲级别
Dim reglv As Integer
para.style = -1 - setlv
演示3:选中段落
.para.range.select()
继续,判断选中段落中是否存在表格
oWordApplic.selection.tables.count >0 ’0说明没有,有的话一般就是1
继续,取消选中
oWordApplic.Selection.EndOf()
4、查找替换文本
代码从VBA中生成,赋值常量字符后整理格式而成。
Public Sub ReplaceText(ByVal OldText As String, ByVal NewText As String)
Dim wdFindContinue As Integer = 1
Dim wdReplaceAll As Integer = 2
With oWordApplic
.Selection.Find.ClearFormatting()
.Selection.Find.Replacement.ClearFormatting()
With .Selection.Find
.Text = OldText
.Replacement.Text = NewText
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
.Selection.Find.Execute(Replace:=wdReplaceAll)
End With
End Sub