此人已疯
当你有了仁慈之心,你就不再是妖了,是人妖!
 

        有时候我们需要在程序中操作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

posted on 2006-06-20 10:23  此人已疯  阅读(840)  评论(0编辑  收藏  举报