ClassWord — 用于Word文档自动化生成的DLL
ClassWord.dll是专用于自动化生成Word文档的动态链接库。可以生成包含各种样式的文本和图形的Word文档。
ClassWord具有如下特色:
(1)采用文本样式对文字进行快速格式设置。
(2)支持图形文件的插入。
(3)支持对表格的插入、单元格合并、快速复制表格和批量修改单元格数据。
(3)支持图形和表格的题注自动编号。
(4)支持页码和页眉的插入。
(5)支持目录的自动生成。
(6)支持前台或者后台自动生成Word文档。
图1 调用ClassWord自动生成Word文档
图2 ClassWord用户手册
Public Class Form1
Private
Sub Button1_Click(sender As System.Object,
e As System.EventArgs)
Handles Button1.Click
Button1.Enabled = False
'===============================================================================================================
'初始化
'===============================================================================================================
Dim MSWord As New ClassWord.ClassWordPIA
Dim sReturn As String = ""
sReturn = MSWord.ConnectMicrosoftWord() 'ShowWordApplication=False
可提高ClassWord性能
'MSWord.AddNewDocument()
'sReturn = MSWord.StartFromTemplateFile("模板1(章).docx")
sReturn = MSWord.StartFromTemplateFile("模板2(Normal).docx")
If sReturn.Length > 0 Then
MsgBox("打开模板文件时出现错误:" + vbCrLf + sReturn, MsgBoxStyle.Critical
+ MsgBoxStyle.OkOnly, "致命错误") : Exit Sub
End If
sReturn = MSWord.CheckTextStyleName("正文", "标题 1", "标题 2", "标题 3", "标题 4")
If sReturn.Length > 0 Then
MsgBox("模板文件信息(文本样式)不完整:" + vbCrLf + sReturn, MsgBoxStyle.Critical
+ MsgBoxStyle.OkOnly, "致命错误") : Exit Sub
End If
'设置图表的题注标签包含多少个章节序号,必须在 Check_ListLevel_And_CaptionLabel 之前被调用
MSWord.SetValue_curCaptionLabel_ChapterStyleLevel(1) '设置为1,则题注标签仅包含第1级标题序号。这是默认值,此语句可忽略。
'
但不可以在 Check_ListLevel_And_CaptionLabel()之后更改。
sReturn = MSWord.Check_ListLevel_And_CaptionLabel
If sReturn.Length > 0 Then
MsgBox("错误:" + vbCrLf + sReturn, MsgBoxStyle.Critical
+ MsgBoxStyle.OkOnly, "致命错误") : Exit Sub
End If
sReturn = MSWord.ClearALLText()
'===============================================================================================================
'写标题和正文、插入图片与图的题注
'===============================================================================================================
sReturn = MSWord.AddParagraph_PureText("报告题目Title123", "宋体", , , , , , , False) '添加一个纯文本段落
sReturn = MSWord.AddParagraph_PureText_with_TextStyle("标题1
", "标题 1", False) '添加一个纯文本段落,内容为标题行,首行不缩进
sReturn = MSWord.InsertNewBlankParagraph(1) '在文档尾部插入一个新的空白行
Dim TextContent As String = "这是正文内容的格式展示。采用" + MSWord.CNQuote("正文") + "文本样式。中文字体为:宋体,英文字体为:Times New Roman。数字:123456789.000。"
sReturn = MSWord.AddParagraph_PureText_with_TextStyle(TextContent, "正文") '添加一个纯文本段落,内容为正文,首行缩进2个字符(默认)
sReturn = MSWord.AddParagraph_PureText_with_TextStyle("标题1.1", "标题 2", False)
sReturn = MSWord.AddParagraph_PureText_with_TextStyle(TextContent, "正文")
'插入指定的图片,并为图片指定题注,此图片未被交叉引用
sReturn = MSWord.AddPictureAndCaption("\Pictures\Picture1.jpg",
, "电影插图", , True) '注意:(1)CaptionName 可以自动识别,不用输入
'
(2)CaptionTitle 之前程序会自动增加一个空格以便与 CaptionName 进行间隔。
sReturn = MSWord.AddParagraph_PureText_with_TextStyle(TextContent, "正文")
sReturn = MSWord.AddParagraph_PureText_with_TextStyle("标题1.2", "标题 2", False)
sReturn = MSWord.AddParagraph_PureText_with_TextStyle(TextContent, "正文")
'===============================================================================================================
'展示对富文本图片的引用
'富文本可包括:纯文本、图片,对图例的交叉引用、对表格的交叉引用、上标文字、下标文字
Dim RichText As String = "这是富文本格式段落的展示。在这里展示:(1)下标的使用;(2)调用图片来插入公式,其中,公式的图片来自于MathType导出的wmf格式图形文件。" + _
"矩形截面配筋公式A{/sub,s/}可表达为:{/Picture,\Pictures\MT_bent_as.wmf
/}和公式{/Picture,\Pictures\MT_bent_as1.wmf /}。"
sReturn = MSWord.AddParagraph_RichText_with_TextStyle(RichText, "正文")
'===============================================================================================================
'展示对图例的交叉引用
RichText = "这是富文本格式段落的展示。在这里展示对图例的交叉引用。" + _
"{/Figure, 第一张狮子的图片 /}所示的图片与{/Figure, 第二张狮子的图片 /}、{/Figure, 又是一个狮子 /}所示的图片是相同的。"
sReturn = MSWord.AddParagraph_RichText_with_TextStyle(RichText, "正文")
sReturn = MSWord.AddPictureAndCaption("\Pictures\KingLion.png",
, "第一张狮子的图片") '注意:(1)CaptionName 可以自动识别,不用输入
sReturn = MSWord.AddPictureAndCaption("\Pictures\KingLion.png",
, "第二张狮子的图片") '注意:(1)CaptionName 可以自动识别,不用输入
sReturn = MSWord.AddParagraph_PureText_with_TextStyle("标题2
", "标题 1", False)
sReturn = MSWord.AddParagraph_PureText_with_TextStyle(TextContent, "正文")
sReturn = MSWord.AddParagraph_PureText_with_TextStyle("标题2.1", "标题 2", False)
sReturn = MSWord.AddParagraph_PureText_with_TextStyle(TextContent, "正文")
sReturn = MSWord.AddParagraph_PureText_with_TextStyle("标题2.2", "标题 2", False)
sReturn = MSWord.AddParagraph_PureText_with_TextStyle(TextContent, "正文")
'再次插入指定的图片,并为图片指定题注
sReturn = MSWord.AddPictureAndCaption("\Pictures\KingLion.png",
, "又是一个狮子")
sReturn = MSWord.AddParagraph_PureText_with_TextStyle("标题3
", "标题 1", False)
sReturn = MSWord.AddParagraph_PureText_with_TextStyle(TextContent, "正文")
sReturn = MSWord.AddParagraph_PureText_with_TextStyle("标题3.1", "标题 2", False)
sReturn = MSWord.AddParagraph_PureText_with_TextStyle(TextContent, "正文")
'===============================================================================================================
'展示对表格的交叉引用
RichText = "这是富文本格式段落的展示。在这里展示:(1)创建表格;(2)对表格的交叉引用;(3)在表格中输入上标、下标和插入图片;(4)设置表格的行高、列宽;(5)合并表格的单元格。" + _
"有限元分析得到的应力计算结果如" + "{/Table, 应力结果表格 /}所示。"
sReturn = MSWord.AddParagraph_RichText_with_TextStyle(RichText, "正文")
'插入表格,此表格为当前表格
sReturn = MSWord.AddTableAndCaption(6, 5, , "应力结果表格", , , , "Table_Strain1")
'设置当前表格的行高(RowIndex=0表示针对所有行),行高以厘米计算。此外,行高还受最小值控制
sReturn = MSWord.SetTableRowHeight(1, 1.2)
'设置当前表格的列宽(ColumnIndex=0表示针对所有的列),列宽以厘米计算,列宽=0时子函数不起作用
sReturn = MSWord.SetTableColumnWidth(0, 2.4)
'填充单元格内容(富文本格式,可插入图片,上标,下标),自由格式
RichText = "长度" + "L{/sub,0/}"
+ "(m)"
sReturn = MSWord.FillTableCell_RichText_Free(1, 2, RichText)
RichText = "面积" + "{/Picture,\Pictures\MT_Area.wmf
/}(mm{/super,2/})"
sReturn = MSWord.FillTableCell_RichText_Free(1, 4, RichText)
'合并指定选区内的单元格,必须在指定单元行高、列宽之后再调用。此外,单元格合并后,单元格的序号会发生变化(例如,合并单元格右侧的列序号会减少,即为真实的列序号)
'因此:(1)连续多次单元格合并时,应指定真实的行序号和列序号;
' (2)单元格合并后再指定行高度、列宽度会出现错误,因此,单元格合并应在指定行高、列宽之后。
sReturn = MSWord.MergeTableCells_Free(1, 2, 1, 3, True)
sReturn = MSWord.MergeTableCells_Free(1, 3, 1, 4, True)
'===============================================================================================================
'为表格进行批量赋值
RichText = "这是富文本格式段落的展示。下面新建表格(如{/Table, 内力结果表格 /}所示),并展示对当前表格的单元格批量赋值的方法。"
sReturn = MSWord.AddParagraph_RichText_with_TextStyle(RichText, "正文")
'插入表格,此表格为当前表格
sReturn = MSWord.AddTableAndCaption(20, 7, , "内力结果表格", , True, 10, "Table_Force1") '将表格及其上方的题注放在纵向页面上
Dim ColumnHeader(1, 7) As
String '以二维数组的形式定义列标题
ColumnHeader(1,1)="截面" : ColumnHeader(1,2)="Fxi(N)"
: ColumnHeader(1,3)="Fyi(N)" :
ColumnHeader(1,4)="Mzi(N*m)"
ColumnHeader(1, 5) = "Fxj(N)"
: ColumnHeader(1, 6) = "Fyj(N)" :
ColumnHeader(1, 7) = "Mzj(N*m)"
sReturn = MSWord.FillTableCell_PureText_BatchMode(1, 1, ColumnHeader) 'Table中的列标题从第1列开始
Dim RowHeader(20, 1) As
String '以二维数组的形式定义行标题
For i As Long = 1 To
UBound(RowHeader, 1)
RowHeader(i, 1) = (i * 10).ToString
Next
sReturn = MSWord.FillTableCell_PureText_BatchMode(2, 1, RowHeader) 'Table中的行标题从第2行开始
Dim DataArray(100, 10) As
Double
For i As Long = 1 To 100
For j As
Long = 1 To 10
DataArray(i, j) = Rnd() * 100 + 200
Next
Next
sReturn = MSWord.FillTableCell_PureText_BatchMode(2, 2, DataArray) 'Table中的有效数据从Cell(2,2)开始
'------------------------------------------------------------------------------------------
sReturn = MSWord.AddParagraph_PureText_with_TextStyle(TextContent, "正文")
'===============================================================================================================
RichText = "下面通过复制功能AddTableByCopy()新建表格(如{/Table, 复制得到的应变表格 /}所示)。新表格随即成为当前表格," + _
"可以使用函数FillTableCell_RichText_Free()和FillTableCell_PureText_BatchMode()进行单元格赋值。"
sReturn = MSWord.AddParagraph_RichText_with_TextStyle(RichText, "正文")
sReturn = MSWord.AddTableByCopy("Table_Strain1",
, "复制得到的应变表格", , , , "Table_Strain2")
sReturn = MSWord.FillTableCell_RichText_Free(1, 1, "New11")
RichText = "下面通过复制功能AddTableByCopy()新建表格(如{/Table, 复制得到的内力表格 /}所示)。新表格随即成为当前表格。"
sReturn = MSWord.AddParagraph_RichText_with_TextStyle(RichText, "正文")
sReturn =
MSWord.AddTableByCopy("Table_Force1",
, "复制得到的内力表格", , True, 10, "Table_Force2")
'===============================================================================================================
'文本输入完成后,在Word文档关闭之前,对Figure和Table进行交叉引用
sReturn = MSWord.Apply_CrossReference_for_Figure()
sReturn = MSWord.Apply_CrossReference_for_Table()
'===============================================================================================================
'插入页码和页眉
sReturn = MSWord.InsertPageNumberAndHeaders()
'插入目录
sReturn = MSWord.InsertTableOfContents()
'------------------------------------------------------------------------------------------
'MSWord.Show_CopyRight()
sReturn = MSWord.SaveCurrentDocument("Demo.docx")
'MSWord.Kill_Word_Unsafely()
MSWord.ReleaseWord()
'------------------------------------------------------------------------------------------
Button1.Enabled = True
Button1.Select()
Me.Close()
End
Sub
End Class