VB.net 操作Word的相关问题

一、有关环境问题

针对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

 

你可能感兴趣的:(VB.net 操作Word的相关问题)