表1:工程 | |||||||
工程名称 | 设计阶段 | 工程检索号 | 卷册号 | 项目名称 | 新 制 | 字数 | 图片数 |
建模工具 | 学习(2) | www.21cmm 如何申请域名 | fw-jm-2002 | 软件工程专家网 | 60 | 1000 | 3 |
表2:校核 | ||
序号 | 校核主要问题 | 执行情况 |
1 | 排列不齐 | No |
2 | 文字错 | Yes |
3 | 文字错 | Yes |
4 | 文字错 | No |
5 | 文字错 | Yes |
6 | 文字错 | No |
表2:注册网址 |
Word域在软件开发中的应用
liyu
摘要 域是Word最具有实用价值的功能之一,它表示文档中可能发生变化的数据或邮件合并文档中套用信函、标签中的占位符。Microsoft Word 可以在您使用一些特定命令时插入域,如“插入”菜单上的“日期和时间”命令。您也可使用“插入”菜单上的“域”命令手动插入域。
1.引言
事实上,我们在日常工作中常会脱离Microsoft Word的操作环境。一般,用户是先建立好一些Word文件模板,然后利用所提供的应用程序功能向Word文件模板中插入域,然后用该域对应的值取代域值,这样就达到了向Microsoft Word文件中插入数据的作用。我们常把数据放入数据库中,数据库的内容不断地变化,我们的域值也跟着不断地变化,取到灵活自动更新的作用,要达到这方面的功能,就应该把数据库与Word域结合起来。
首先要解决这一问题,我们必须先了解Word域有关的知识:Word域代码位于花括号或大括号 ( { } )中,域类似于 Microsoft Excel 中的公式:域代码类似于公式,域结果(域结果:当
Microsoft Word 执行域指令时,在文档中插入的文字或图形。在打印文档或隐藏域代码时,将以域结果替换域代码。)类似于公式产生的值。可在文档中切换显示域代码及其结果。正好,数据库的字段名对应域代码,字段值对应域结果。
2.实现功能
下面是本人利用VBA编写的一通用的处理Word域的程序:
主要功能:通用VB6编写通用的类,给用户提供可视化的编辑界面,用于用户在Word文件中插入域标志。针对Word文件或Excel表格文件,扫描整个文件,将其中的域标志(如Set “aaa”)取出来,然后通过从数据库中取出”aaa”字段所对应的值,将值填写到文件中域对应的位置。若对应位置已有值,则判断该值与要填写的值是否相同,若不同则替换。插入值分为:
A.单纯的值,直接使用一个值替换域。
B.表格中的单元格。若该表格填写不下,是否增加表格单元?以及与该单元关联的域等。
3.操作步骤
3.1建立项目
开发方法:启动VB6,新建一ActiveX Dll工程,把工程名更改为VbaWord,把类名Class1更改为CSetDocField,向工程中增加一窗体Form1, 窗体标题为处理Word文档,在Form1上加入2个CommandButton,用于打开文件和保存文件用的命令按钮;2个ComboBox,用于所插入的字段名;2个 Label;2个CommonDialog,用于执行打开文件和保存文件。界面如下:
3.2在项目中加入引用
按工程--引用--Microsoft Word 10.0 Object Library引用Word(OFFICE 2000为Microsoft Word 9.0 Object Library)。
3.3增加操作窗体
在Form1的代码窗中定义以下变量:
Option Base 0
Private wdApp As New Word.Application()
Private wdDoc As New Word.Document()
'所处理的Word模板
Private FileName As String
'申请CSetDocField对象
Private mDocFld As New CSetDocField()
'Word工具栏对象及菜单栏对象
Dim CommandBarIndex() As Integer
Dim SaveCommandBarMenuIndex() As Integer
' 在Form的Load的事件中定义的打开和保存文件的格式,并填充ComboBox数据。ComboBox数据对应数据库表的字段名,这里由CSetDocField的属性提供。
Private Sub Form_Load()
Dim i As Integer
CommonDialog1.DialogTitle = "打开"
CommonDialog1.Filter = "Word文档(*.doc)|*.doc|Word文档模板(*.dot)|*.dot"
CommonDialog2.DialogTitle = "保存文件"
CommonDialog2.Filter = Word文档(*.doc)|*.doc|Word文档模板(*.dot)|*.dot"
FieldCount = 0
Me.ScaleY(Me.height, fromscale:=vbTwips, toscale:=vbPoints)
For i = 1 To gFieldColl.Count
Combo1.AddItem(gFieldColl.Item(i))
Next
For i = 1 To gTableColl.Count
Combo2.AddItem(gTableColl.Item(i))
Next
End Sub
在Form1的代码窗中定义以下过程和函数:
'定义打开Word文件的过程。建立Word应该对象及文档对象,并打开文件。
Private Sub OpenWordDocument(ByVal FileName As String)
wdApp = CreateObject("Word.Application")
wdApp.Documents.Open(FileName)
wdDoc = wdApp.ActiveDocument
wdDoc.ActiveWindow.DocumentMap = False
wdApp.Visible = True
IsWordRunning = True
End Sub
'在文档中插入域.KeyWord:域的关键字.
这里我们利用Word文档对象的域对象的Add方法向Word文件中插入域。域的Data属性代表该域的名称。插入域时应该选取得插入点(Selection),既用户光标处位置。如果该位置是单元格且已插入域应该提示是否覆盖
Private Function InsertField(ByVal KeyWord As String) As Integer
Dim mySelection As Selection
Dim Code As String
Dim MyField As Field
Dim myRange As Range
wdApp.Selection.Collapse(Direction:=wdCollapseEnd)
mySelection = wdApp.Selection '插入点
If IsCell(mySelection) = True Then
If CellFieldCount(mySelection) > 0 Then
If MsgBox("该单元格已有域,是否覆盖?", vbYesNo) = 6 Then
mySelection.Cells(1).Select()
mySelection.Delete() ' .Text = Value
' mySelection.Delete Unit:=wdCharacter, Count:=1
'mySelection.Cells(1).Range.Fields(1).Delete
Else
Exit Function
End If
End If
End If
MyField = wdDoc.Fields.Add(Range:=mySelection.Range, Type:=wdFieldAddin)
MyField.Data = KeyWord
End Function
'选择点(光标)是否是单元格.
我们可以通过选择点的表格数判断插入点的性质。表格数为0,则选择点不位于单元格中,反则不位于单元格中。
Private Function IsCell(ByVal mySelection As Selection) As Boolean
If mySelection.Tables.Count > 0 Then
IsCell = True
Else
IsCell = False
End If
End Function
'取得选择点(光标)的单元格的域数
Private Function CellFieldCount(ByVal mySelection As Selection) As Integer
CellFieldCount = mySelection.Cells(1).Range.Fields.Count
End Function
'打开Word文件.并使处理界面位于Word最顶端,适当调整Word位置,关闭Word其它功能。
Private Sub cmdOpenFile_Click()
CommonDialog1.ShowOpen()
FileName = CommonDialog1.FileName
If FileName = "" Then
Exit Sub
End If
OpenWordDocument(FileName)
IsShowField(True)
发布评论