VB.NET操作Word

    技术2022-05-19  27

    Imports Microsoft.Office.Interop

    Public Class Form1

        Dim WithEvents MyWord As Word.Application   'WithEvents        '用于存放   Microsoft   Word   引用的变量。  

        Dim MyDoc As Word.Document

     

        Dim WordWasNotRunning As Boolean

        Dim DocWasNotOpened As Boolean

        Dim str1 As String

    '-------------------------------------------------------------------------------------

        '打开Word程序,如果Word已经运行,就GetObject,否则就CreateObject

        Private Sub Get_Word()

            On Error GoTo Open_word       '不带第一个参数调用   Getobject   函数将  

            '返回对该应用程序的实例的引用,如果该应用程序不在运行,则会产生错误。  

            MyWord = GetObject(, "Word.Application")

            GoTo Set_Visible

    Open_word:

            MyWord = CreateObject("Word.Application")

            '如果发生错误则要创建一个Word.Application对象  

            WordWasNotRunning = True   '表明Word是由程序启动的,最后应该关闭  

            Err.Clear()

    Set_Visible:

            MyWord.Visible = True

            MyWord.Activate()

        End Sub

    '-------------------------------------------------------------------------------------

        '从模板生成Word文档

        Public Sub NewDocWithModel(ByVal FileName As String)

            Dim missing = System.Reflection.Missing.Value

            Dim isVisible As Boolean = False

            Dim strName As String

     

            strName = FileName

            MyDoc = MyWord.Documents.Add(strName, missing, missing, isVisible)

            DocWasNotOpened = True

            MyDoc.Activate()

            MyWord.Visible = True

        End Sub

    '-------------------------------------------------------------------------------------

        Private Sub Get_Doc()

            Dim MyTime As String

         

            MyTime = Format(Now, "yyyy年M月d日h时m分")

     

            '在此处对文件进行操作。 

            MyDoc.Activate()

            MyDoc.Select()

            With MyWord.Selection.Find

                .ClearFormatting()

    '替换Word文档模板中的“<姓名>和<性别>”为相应值

    '<姓名>是提前在模板是定义的,也可以用别的比较特别的字符代替

                While .Execute("<姓名>")   '被替换的内容  

                    MyWord.Selection.TypeText(Text:="张三")   '替换后的内容  

                End While

                While .Execute("<性别>")   '被替换的内容  

                    MyWord.Selection.TypeText(Text:="女")   '替换后的内容  

                End While      

            End With

        End Sub

    '-------------------------------------------------------------------------------------

        '打开Word,从模板生成Word文档,替换文本

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Get_Word() '打开Word程序

            NewDocWithModel("D:/bai/vb.net/内部明电批办单.dot") '从模板生成文档

            Get_Doc() '替换相关文本

        End Sub

    '-------------------------------------------------------------------------------------

        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

            MsgBox("WordWasNotrunning=" & WordWasNotRunning & ";DocWasNotOpened=" & DocWasNotOpened)

     

            If WordWasNotRunning Then 'Word是vb.net打开的,关闭它。

                WordWasNotRunning = False

                DocWasNotOpened = False

                MyDoc.Close(Word.WdSaveOptions.wdDoNotSaveChanges)

                MyWord.Quit()

            Else 'Word以前就打开,只关闭vb.net打开的Word文档

                If DocWasNotOpened = True Then

                    DocWasNotOpened = False

                    MyDoc.Close(Word.WdSaveOptions.wdDoNotSaveChanges) '(Word.WdSaveOptions.wdDoNotSaveChanges)

                End If

            End If

            '释放对象

            MyDoc = Nothing

            MyWord = Nothing

        End Sub

    '-------------------------------------------------------------------------------------

        '显示从Word中取得的数据

        Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

            TextBox1.Text = str1

        End Sub

    '-------------------------------------------------------------------------------------

        '关闭前保存数据到变量

        Private Sub MyWord_DocumentBeforeClose(ByVal Doc As Microsoft.Office.Interop.Word.Document, ByRef Cancel As Boolean) Handles MyWord.DocumentBeforeClose

            '保存Word文档中,表格1的第3行第2列的文本,以后Vb.net调用

            str1 = Doc.Tables(1).Rows(3).Cells(2).Range.Text

        End Sub

    '-------------------------------------------------------------------------------------

        'Word退出后,执行的操作

        '如果用户手工关闭Word,那么必须释放MyDoc和MyWd,否则再次打开Word就会出错

        Private Sub MyWord_Quit() Handles MyWord.Quit

            MyDoc = Nothing

            MyWord = Nothing

            WordWasNotRunning = False

            DocWasNotOpened = False

        End Sub

    End Class

     

    本文来自博客,转载请标明出处:http://blog.csdn.net/rzbai/archive/2010/04/21/5510039.aspx


    最新回复(0)