原文出处 http://blog.csdn.net/szg3827/archive/2008/07/06/2618130.aspx
- 有时候我们需要在程序中操作Word文档,虽然C#可以用来写这样的一个类,但由于VB先天的优势(对VBA的完全支持),用VB来写显然是更好的选择。下面这个类基于网上的一个类,修改了其中的一些错误,添加了几个方法,在我的运行环境(VS.NET,Office2003)中运行通过。使用时,在“引用”中添加这个类的引用,就可以直接用C#调用类中的方法来操作Word文档了。
- Public Class WordOpLibClass WordOpLib
- Private oWordApplic As Word.Application
- Private oDocument As Word.Document
- Private oRange As Word.Range
- Private oSelection As Word.Selection
- Public Sub New()Sub New()
- '激活com word接口
- oWordApplic = New Word.Application
- oWordApplic.Visible = True
- End Sub
- '设置选定文本
- Public Sub SetRange()Sub SetRange(ByVal para As Integer)
- oRange = oDocument.Paragraphs(para).Range
- oRange.Select()
- End Sub
- Public Sub SetRange()Sub SetRange(ByVal para As Integer, ByVal sent As Integer)
- oRange = oDocument.Paragraphs(para).Range.Sentences(sent)
- oRange.Select()
- End Sub
- Public Sub SetRange()Sub SetRange(ByVal startpoint As Integer, ByVal endpoint As Integer, ByVal flag As Boolean)
- If flag = True Then
- oRange = oDocument.Range(startpoint, endpoint)
- oRange.Select()
- Else
- End If
- End Sub
- '生成空的新文档
- Public Sub NewDocument()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()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()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()Sub OpenFile(ByVal FileName As String, ByVal 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()Sub Quit()
- Dim missing = System.Reflection.Missing.Value
- oWordApplic.Quit()
- System.Runtime.InteropServices.Marshal.ReleaseComObject(oWordApplic)
- oWordApplic = Nothing
- End Sub
- '关闭所有打开的文档
- Public Sub CloseAllDocuments()Sub CloseAllDocuments()
- oWordApplic.Documents.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
- End Sub
- '关闭当前的文档
- Public Sub CloseCurrentDocument()Sub CloseCurrentDocument()
- oDocument.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
- End Sub
- '保存当前文档
- Public Sub Save()Sub Save()
- Try
- oDocument.Save()
- Catch
- MsgBox(Err.Description)
- End Try
- End Sub
- '另存为文档
- Public Sub SaveAs()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()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()Sub InsertText(ByVal text As String)
- oWordApplic.Selection.TypeText(text)
- End Sub
- '插入一个空行
- Public Sub InsertLineBreak()Sub InsertLineBreak()
- oWordApplic.Selection.TypeParagraph()
- End Sub
- '插入指定行数的空行
- Public Sub InsertLineBreak()Sub InsertLineBreak(ByVal lines As Integer)
- Dim i As Integer
- For i = 1 To lines
- oWordApplic.Selection.TypeParagraph()
- Next
- End Sub
- '插入表格
- Public Sub InsertTable()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()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()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()Sub DissableStyle()
- oWordApplic.Selection.Font.Bold = 0
- oWordApplic.Selection.Font.Italic = 0
- oWordApplic.Selection.Font.Subscript = 0
- End Sub
- '设置字体字号
- Public Sub SetFontSize()Sub SetFontSize(ByVal nSize As Integer)
- oWordApplic.Selection.Font.Size = nSize
- End Sub
- '跳过本页
- Public Sub InsertPageBreak()Sub InsertPageBreak()
- Dim pBreak As Integer
- pBreak = CInt(Word.WdBreakType.wdPageBreak)
- oWordApplic.Selection.InsertBreak(pBreak)
- End Sub
- '转到书签
- Public Sub GotoBookMark()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()Function BookMarkExist(ByVal strBookMark As String) As Boolean
- Dim Exist As Boolean
- Exist = oDocument.Bookmarks.Exists(strBookMark)
- Return Exist
- End Function
- '转到文档结尾
- Public Sub GotoTheEnd()Sub GotoTheEnd()
- Dim missing = System.Reflection.Missing.Value
- Dim unit = Word.WdUnits.wdStory
- oWordApplic.Selection.EndKey(unit, missing)
- End Sub
- '转到文档开头
- Public Sub GotoTheBegining()Sub GotoTheBegining()
- Dim missing = System.Reflection.Missing.Value
- Dim unit = Word.WdUnits.wdStory
- oWordApplic.Selection.HomeKey(unit, missing)
- End Sub
- '转到表格
- Public Sub GotoTheTable()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(1, 1).Range
- oRange.Select()
- End Sub
- '转到表格的某个单元格
- Public Sub GotoTableCell()Sub GotoTableCell(ByVal ntable As Integer, ByVal nRow As Integer, ByVal nColumn As Integer)
- oRange = oDocument.Tables(ntable).Cell(nRow, nColumn).Range
- oRange.Select()
- End Sub
- '表格中转到右面的单元格
- Public Sub GotoRightCell()Sub GotoRightCell()
- Dim missing = System.Reflection.Missing.Value
- Dim direction = Word.WdUnits.wdCell
- oWordApplic.Selection.MoveRight(direction, missing, missing)
- End Sub
- '表格中转到左面的单元格
- Public Sub GotoLeftCell()Sub GotoLeftCell()
- Dim missing = System.Reflection.Missing.Value
- Dim direction = Word.WdUnits.wdCell
- oWordApplic.Selection.MoveLeft(direction, missing, missing)
- End Sub
- '表格中转到下面的单元格
- Public Sub GotoDownCell()Sub GotoDownCell()
- Dim missing = System.Reflection.Missing.Value
- Dim direction = Word.WdUnits.wdCell
- oWordApplic.Selection.MoveDown(direction, missing, missing)
- End Sub
- '表格中转到上面的单元格
- Public Sub GotoUpCell()Sub GotoUpCell()
- Dim missing = System.Reflection.Missing.Value
- Dim direction = Word.WdUnits.wdCell
- oWordApplic.Selection.MoveUp(direction, missing, missing)
- End Sub
- '插入图片
- Public Sub InsertPic()Sub InsertPic(ByVal FileName As String)
- Dim missing = System.Reflection.Missing.Value
- oWordApplic.Selection.InlineShapes.AddPicture(FileName, False, True, missing)
- End Sub
- End Class
浙公网安备 33010602011771号