表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
'申请Word应该对象及文档对象
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
' FormLoad的事件中定义的打开和保存文件的格式,并填充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)