zoukankan      html  css  js  c++  java
  • 操作Word文档的类(VB.NET)

            有时候我们需要在程序中操作Word文档,虽然C#可以用来写这样的一个类,但由于VB先天的优势(对VBA的完全支持),用VB来写显然是更好的选择。下面这个类基于网上的一个类,修改了其中的一些错误,添加了几个方法,在我的运行环境(VS.NET,Office2003)中运行通过。使用时,在“引用”中添加这个类的引用,就可以直接用C#调用类中的方法来操作Word文档了。

    Public Class WordOpLib
        
    Private oWordApplic As Word.Application
        
    Private oDocument As Word.Document
        
    Private oRange As Word.Range
        
    Private oSelection As Word.Selection
        
    Public Sub New()
            
    '激活com  word接口
            oWordApplic = New Word.Application
            oWordApplic.Visible 
    = True
        
    End Sub

        
    '设置选定文本
        Public Sub SetRange(ByVal para As Integer)
            oRange 
    = oDocument.Paragraphs(para).Range
            oRange.Select()
        
    End Sub

        
    Public Sub SetRange(ByVal para As IntegerByVal sent As Integer)
            oRange 
    = oDocument.Paragraphs(para).Range.Sentences(sent)
            oRange.Select()
        
    End Sub

        
    Public Sub SetRange(ByVal startpoint As IntegerByVal endpoint As IntegerByVal flag As Boolean)
            
    If flag = True Then
                oRange 
    = oDocument.Range(startpoint, endpoint)
                oRange.Select()
            
    Else

            
    End If
        
    End Sub


        
    '生成空的新文档
        Public Sub NewDocument()
            
    Dim missing = System.Reflection.Missing.Value
            
    Dim isVisible As Boolean = True
            oDocument 
    = oWordApplic.Documents.Add(missing, missing, missing, missing)
            oDocument.Activate()
        
    End Sub

        
    '使用模板生成新文档
        Public Sub NewDocWithModel(ByVal FileName As String)
            
    Dim missing = System.Reflection.Missing.Value
            
    Dim isVisible As Boolean = True
            
    Dim strName As String
            strName 
    = FileName

            oDocument 
    = oWordApplic.Documents.Add(strName, missing, missing, isVisible)
            oDocument.Activate()
        
    End Sub

        
    '打开已有文档
        Public Sub OpenFile(ByVal FileName As String)
            
    Dim strName As String
            
    Dim isReadOnly As Boolean
            
    Dim isVisible As Boolean
            
    Dim missing = System.Reflection.Missing.Value

            strName 
    = FileName
            isReadOnly 
    = False
            isVisible 
    = True

            oDocument 
    = oWordApplic.Documents.Open(strName, missing, isReadOnly, missing, missing, missing, missing, missing, missing, missing, missing, isVisible, missing, missing, missing, missing)
            oDocument.Activate()

        
    End Sub

        
    Public Sub OpenFile(ByVal FileName As StringByVal isReadOnly As Boolean)
            
    Dim strName As String
            
    Dim isVisible As Boolean
            
    Dim missing = System.Reflection.Missing.Value

            strName 
    = FileName
            isVisible 
    = True

            oDocument 
    = oWordApplic.Documents.Open(strName, missing, isReadOnly, missing, missing, missing, missing, missing, missing, missing, missing, isVisible, missing, missing, missing, missing)
            oDocument.Activate()
        
    End Sub

        
    '退出Word
        Public Sub Quit()
            
    Dim missing = System.Reflection.Missing.Value
            oWordApplic.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oWordApplic)
            oWordApplic 
    = Nothing
        
    End Sub

        
    '关闭所有打开的文档
        Public Sub CloseAllDocuments()
            oWordApplic.Documents.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
        
    End Sub

        
    '关闭当前的文档
        Public Sub CloseCurrentDocument()
            oDocument.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
        
    End Sub

        
    '保存当前文档
        Public Sub Save()
            
    Try
                oDocument.Save()
            
    Catch
                
    MsgBox(Err.Description)
            
    End Try
        
    End Sub

        
    '另存为文档
        Public Sub SaveAs(ByVal FileName As String)
            
    Dim strName As String
            
    Dim missing = System.Reflection.Missing.Value

            strName 
    = FileName

            oDocument.SaveAs(strName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing)
        
    End Sub

        
    '保存为Html文件
        Public Sub SaveAsHtml(ByVal FileName As String)
            
    Dim missing = System.Reflection.Missing.Value
            
    Dim strName As String

            strName 
    = FileName
            
    Dim format = CInt(Word.WdSaveFormat.wdFormatHTML)

            oDocument.SaveAs(strName, 
    format, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing)
        
    End Sub

        
    '插入文本
        Public Sub InsertText(ByVal text As String)
            oWordApplic.Selection.TypeText(text)
        
    End Sub

        
    '插入一个空行
        Public Sub InsertLineBreak()
            oWordApplic.Selection.TypeParagraph()
        
    End Sub

        
    '插入指定行数的空行
        Public Sub InsertLineBreak(ByVal lines As Integer)
            
    Dim i As Integer
            
    For i = 1 To lines
                oWordApplic.Selection.TypeParagraph()
            
    Next
        
    End Sub

        
    '插入表格
        Public Sub InsertTable(ByRef table As DataTable)
            
    Dim oTable As Word.Table
            
    Dim rowIndex, colIndex, NumRows, NumColumns As Integer
            rowIndex 
    = 1
            colIndex 
    = 0

            NumRows 
    = table.Rows.Count + 1
            NumColumns 
    = table.Columns.Count
            oTable 
    = oDocument.Tables.Add(oWordApplic.Selection.Range(), NumRows, NumColumns)


            
    '初始化列
            Dim Row As DataRow
            
    Dim Col As DataColumn
            
    For Each Col In table.Columns
                colIndex 
    = colIndex + 1
                oTable.Cell(
    1, colIndex).Range.InsertAfter(Col.ColumnName)
            
    Next

            
    '将行添入表格
            For Each Row In table.Rows
                rowIndex 
    = rowIndex + 1
                colIndex 
    = 0
                
    For Each Col In table.Columns
                    colIndex 
    = colIndex + 1
                    oTable.Cell(rowIndex, colIndex).Range.InsertAfter(Row(Col.ColumnName))
                
    Next
            
    Next
            oTable.AllowAutoFit 
    = True
            oTable.ApplyStyleFirstColumn 
    = True
            oTable.ApplyStyleHeadingRows 
    = True
        
    End Sub

        
    '设置对齐
        Public Sub SetAlignment(ByVal strType As String)
            
    Select Case strType
                
    Case "center"
                    oWordApplic.Selection.ParagraphFormat.Alignment 
    = Word.WdParagraphAlignment.wdAlignParagraphCenter
                
    Case "left"
                    oWordApplic.Selection.ParagraphFormat.Alignment 
    = Word.WdParagraphAlignment.wdAlignParagraphLeft
                
    Case "right"
                    oWordApplic.Selection.ParagraphFormat.Alignment 
    = Word.WdParagraphAlignment.wdAlignParagraphRight
                
    Case "justify"
                    oWordApplic.Selection.ParagraphFormat.Alignment 
    = Word.WdParagraphAlignment.wdAlignParagraphJustify
            
    End Select
        
    End Sub

        
    '设置字体
        Public Sub SetStyle(ByVal strFont As String)
            
    Select Case strFont
                
    Case "bold"
                    oWordApplic.Selection.Font.Bold 
    = 1
                
    Case "italic"
                    oWordApplic.Selection.Font.Italic 
    = 1
                
    Case "underlined"
                    oWordApplic.Selection.Font.Subscript 
    = 1
            
    End Select
        
    End Sub

        
    '取消字体风格
        Public Sub DissableStyle()
            oWordApplic.Selection.Font.Bold 
    = 0
            oWordApplic.Selection.Font.Italic 
    = 0
            oWordApplic.Selection.Font.Subscript 
    = 0
        
    End Sub

        
    '设置字体字号
        Public Sub SetFontSize(ByVal nSize As Integer)
            oWordApplic.Selection.Font.Size 
    = nSize
        
    End Sub

        
    '跳过本页
        Public Sub InsertPageBreak()
            
    Dim pBreak As Integer
            pBreak 
    = CInt(Word.WdBreakType.wdPageBreak)
            oWordApplic.Selection.InsertBreak(pBreak)
        
    End Sub

        
    '转到书签
        Public Sub GotoBookMark(ByVal strBookMark As String)
            
    Dim missing = System.Reflection.Missing.Value
            
    Dim BookMark = CInt(Word.WdGoToItem.wdGoToBookmark)
            oWordApplic.Selection.GoTo(BookMark, missing, missing, strBookMark)
        
    End Sub

        
    '判断书签是否存在
        Public Function BookMarkExist(ByVal strBookMark As StringAs Boolean
            
    Dim Exist As Boolean
            Exist 
    = oDocument.Bookmarks.Exists(strBookMark)
            
    Return Exist
        
    End Function

        
    '转到文档结尾
        Public Sub GotoTheEnd()
            
    Dim missing = System.Reflection.Missing.Value
            
    Dim unit = Word.WdUnits.wdStory
            oWordApplic.Selection.EndKey(unit, missing)
        
    End Sub

        
    '转到文档开头
        Public Sub GotoTheBegining()
            
    Dim missing = System.Reflection.Missing.Value
            
    Dim unit = Word.WdUnits.wdStory
            oWordApplic.Selection.HomeKey(unit, missing)
        
    End Sub

        
    '转到表格
        Public Sub GotoTheTable(ByVal ntable As Integer)
            
    'Dim missing = System.Reflection.Missing.Value
            'Dim what = Word.WdGoToItem.wdGoToTable
            'Dim which = Word.WdGoToDirection.wdGoToFirst
            'Dim count = ntable

            
    'oWordApplic.Selection.GoTo(what, which, count, missing)
            'oWordApplic.Selection.ClearFormatting()

            
    'oWordApplic.Selection.Text = ""
            oRange = oDocument.Tables(ntable).Cell(11).Range
            oRange.Select()
        
    End Sub

        
    '转到表格的某个单元格
        Public Sub GotoTableCell(ByVal ntable As IntegerByVal nRow As IntegerByVal nColumn As Integer)
            oRange 
    = oDocument.Tables(ntable).Cell(nRow, nColumn).Range
            oRange.Select()
        
    End Sub

        
    '表格中转到右面的单元格
        Public Sub GotoRightCell()
            
    Dim missing = System.Reflection.Missing.Value
            
    Dim direction = Word.WdUnits.wdCell
            oWordApplic.Selection.MoveRight(direction, missing, missing)
        
    End Sub

        
    '表格中转到左面的单元格
        Public Sub GotoLeftCell()
            
    Dim missing = System.Reflection.Missing.Value
            
    Dim direction = Word.WdUnits.wdCell
            oWordApplic.Selection.MoveLeft(direction, missing, missing)
        
    End Sub

        
    '表格中转到下面的单元格
        Public Sub GotoDownCell()
            
    Dim missing = System.Reflection.Missing.Value
            
    Dim direction = Word.WdUnits.wdCell
            oWordApplic.Selection.MoveDown(direction, missing, missing)
        
    End Sub

        
    '表格中转到上面的单元格
        Public Sub GotoUpCell()
            
    Dim missing = System.Reflection.Missing.Value
            
    Dim direction = Word.WdUnits.wdCell
            oWordApplic.Selection.MoveUp(direction, missing, missing)
        
    End Sub

        
    '插入图片
        Public Sub InsertPic(ByVal FileName As String)
            
    Dim missing = System.Reflection.Missing.Value
            oWordApplic.Selection.InlineShapes.AddPicture(FileName, 
    FalseTrue, missing)
        
    End Sub


    End Class

  • 相关阅读:
    Java中的Socket用法
    ASP.NET MVC5 的请求管道和运行生命周期
    cookie、session和application
    手把手带你开发一款 IIS 模块后门
    HttpModule介绍
    ASP.NET MVC入门到精通——MVC请求管道
    HttpModule的认识
    WCF技术剖析之二:再谈IIS与ASP.NET管道
    ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline
    ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline[上篇]
  • 原文地址:https://www.cnblogs.com/supersand/p/300711.html
Copyright © 2011-2022 走看看