国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Word域與數(shù)據(jù)庫的結(jié)合編程(2)

插入多值域時要考慮表格行數(shù)夠不夠,不夠時要增加表格行數(shù),且每插入一個值,光標(biāo)要下移一行。這里對應(yīng)的是數(shù)據(jù)庫的"校核"表。實現(xiàn)的方法如下:

來源:ccidnet 編輯:若水 時間:2008-05-05
收藏:

'插入多值域
    Public Function InsertCollection() As Boolean
        Dim i, j, Count As Integer
        Dim KeyWord As String
        Dim mySelection As Selection
        Dim rec() As Object
        Dim recCount As Integer

        Count = wdDoc.Fields.Count
        For i = 1 To Count
            If wdDoc.Fields.Item(i).Type = 81 Then
                KeyWord = Trim(wdDoc.Fields.Item(i).Data)
                If Right(KeyWord, 1) = "F" Then
                    KeyWord = Left(KeyWord, Len(KeyWord) - 1)
                    rec = clsDB.GetFieldValues("校核", KeyWord)
                    '選擇有域的單元格
                    wdDoc.Fields.Item(i).Select()
                    mySelection = wdApp.Selection      '插入點
                    mySelection.Cells.Item(1).Select()
                    '清除原值
                    mySelection.Delete()
                    '還原原域并更新值
                    InsertField(KeyWord + "F")
                    wdDoc.Fields.Item(i).Result.Text = rec(0).itemarray(0)
                    '光標(biāo)下移
                    mySelection.Select()
                    mySelection.MoveDown(Unit:=wdLine, Count:=1)
                    With rec
                        recCount =.GetLength(0) - 1
                        For j = 1 To recCount - 1
                            If IsInsertRow = False Then
                                Call InsertRow(mySelection, recCount)
                            End If
                            mySelection.Cells.Item(1).Select()
                            mySelection.Delete()
                            mySelection.TypeText(Text:=rec(j).itemarray(0))
                            mySelection.MoveDown(Unit:=wdLine, Count:=1)
                        Next
                    End With
                End If
            End If
        Next
    End Function
    Private Function InsertRow(ByVal mySelection As Selection,
    ByVal recCount As Integer) As Boolean
        Dim InsertRowCount As Integer           '插入的行數(shù)
        Dim CurrCell As Cell
        CurrCell = mySelection.Cells.Item(1)
        InsertRowCount = recCount - mySelection.Tables.Item(1).Rows.Count + 1
        If InsertRowCount > 0 Then
            mySelection.InsertRows(InsertRowCount)
            CurrCell.Select()
            mySelection.MoveUp(Unit:=wdLine, Count:=InsertRowCount)
            IsInsertRow = True
        End If
End Function

如果表格行數(shù)少于表數(shù)據(jù)的行數(shù)則應(yīng)該增加表格行數(shù)。增加多少表格行數(shù)由表數(shù)據(jù)的行數(shù)減去現(xiàn)有表格行數(shù)加入計算出來。當(dāng)插入了行,光標(biāo)一定下移了幾行,這里要還原光標(biāo)至原來位置,方法是先保留插入點,插入行后,重新選擇插入點,使光標(biāo)上移幾行。表格已經(jīng)插入行以后就不要再插入了,所以至IsInsertRow為真。

 

'向表格中增加行數(shù)。
    Private Function IsInsert(ByVal mySelection As Selection,
    ByVal recCount As Integer) As Boolean
      Dim InsertRowCount As Integer           '插入的行數(shù)
      Dim CurrCell As Cell
      CurrCell = mySelection.Cells.Item(1)
      InsertRowCount = recCount - mySelection.Tables.Item(1).Rows.Count + 1
        If InsertRowCount > 0 Then
            mySelection.InsertRows(InsertRowCount)
            CurrCell.Select()
            mySelection.MoveUp(Unit:=wdLine, Count:=InsertRowCount)
            IsInsertRow = True
        End If
End Function


  Word的菜單和工具箱很多,用戶操作時先關(guān)掉這些不必要的東西,最后恢復(fù)Word環(huán)境的原狀。

'恢復(fù)Word環(huán)境的所有命令及菜單。
    Public Sub OpenCommandBar()
        Dim i As Integer
        For i = 0 To UBound(CommandBarIndex) - 1
            wdDoc.CommandBars(i + 1).Visible = True
        Next
        For i = 0 To UBound(SaveCommandBarMenuIndex) - 1
            wdDoc.CommandBars.Item("Menu Bar").Controls(i + 1)。Visible = True
        Next
    End Sub
    '關(guān)閉Word環(huán)境的所有命令及菜單。
    Public Sub CloseCommandBar()
        Dim i As Integer
        Dim cBar
        ReDim CommandBarIndex(1)
        ReDim SaveCommandBarMenuIndex(1)
        i = 0
        For Each cBar In wdDoc.CommandBars
            If cBar.Type = 0 And cBar.Enabled = True Then
                If cBar.Visible = True Then
                    ReDim CommandBarIndex(i + 1)
                    CommandBarIndex(i) = cBar.Index
                    i = i + 1
                    cBar.Visible = False
                End If
            End If
        Next
        i = 0
        For Each cBar In wdDoc.CommandBars("Menu Bar").Controls
            If cBar.Visible = True Then
                ReDim SaveCommandBarMenuIndex(i + 1)
                SaveCommandBarMenuIndex(i) = cBar.Index
                i = i + 1
                cBar.Visible = False
            End If
        Next
End Sub

 

2.增加一個處理數(shù)據(jù)庫的類COleDataAccess。

  COleDataAccess類很簡單,包含連接數(shù)據(jù)庫的方法ConnAccess,打開靜態(tài)表的方法GetDataTable,由字段名得到字段值的方法GetFieldValues。

Public Class COleDataAccess
Private mOleCnnDB As New OleDbConnection()
'連接Access數(shù)據(jù)庫:DBName數(shù)據(jù)庫名。
    Public Sub ConnAccess(ByVal DBName As String)
        mOleCnnDB.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""
";User ID=Admin;" & _
         "Data Source='" & DBName & "'"
      mOleCnnDB.Open()
    End Sub
    '獲取數(shù)據(jù)表.strSql查詢條件。
    Public Overloads Function GetDataTable(ByVal strSql As String) As DataTable
        Dim myDataSet As New DataSet()
        Dim myOleDataAdapter As New OleDbDataAdapter()
        myOleDataAdapter.SelectCommand = New OleDbCommand(strSql, mOleCnnDB)
        Try
            myOleDataAdapter.Fill(myDataSet)
        Catch er As Exception
            MsgBox(er.ToString)
        End Try
        Return myDataSet.Tables(0)
    End Function
'由字段名得到字段值的方法:. TableName表名 ; FieldName 字段名
    Public Overloads Function GetFieldValues(ByVal TableName As String,
    ByVal FieldName As String) As Object()
        Dim dr As DataTable
        Dim sql As String
        sql = "select " + FieldName + " from " + TableName
        dr = GetDataTable(sql)
        Dim al(dr.Rows.Count) As Object
        dr.Rows.CopyTo(al, 0)
        Return al
    End Function
End Class



3.增加模塊Module1

  模塊Module1定義COleDataAccess類的變量clsDB,并連接數(shù)據(jù)庫,顯示用戶窗體。

Module Module1
    Public clsDB As New COleDataAccess()
    Sub main()
        clsDB.ConnAccess("工程數(shù)據(jù)。mdb")
        Dim frm As New frmUserWord()
        frm.ShowDialog()
    End Sub
End Module

 


4.增加用戶操作窗體

  向工程中增加一窗體frmUserWord,窗體標(biāo)題為"處理Word文檔",在frmUserWord上加入3個CommandButton,用于打開文件(cmdOpenFile)、填充數(shù)據(jù)(cmdFill)、保存文件(cmdSave)用的命令按鈕;2個ComboBox,用于所插入的字段名;2個 Label;2個CommonDialog,用于執(zhí)行打開文件和保存文件;打開文件的對話框OpenFileDialog1、保存文件的對話框SaveFileDialog1。界面如下:



  窗體frmUserWord類事實很簡單,frmUserWord 類的代碼如下:
 
Public Class frmUserWord
    Inherits System.Windows.Forms.Form
Dim clsDoc As New CWordDoc()
'打開Word文件。并使處理界面位于Word最頂端,適當(dāng)調(diào)整Word位置,關(guān)閉Word其它功能。
Private Sub cmdOpenFile_Click(ByVal sender As System。Object,
ByVal e As System。EventArgs) Handles cmdOpenFile。Click
        Dim FileName As String
        OpenFileDialog1.ShowDialog()
        FileName = OpenFileDialog1.FileName
        If FileName = "" Then
            Exit Sub
        End If
        clsDoc.OpenWordDocument(FileName)
        clsDoc.SetWordSize(0, 50, 2000, 2000)
       clsDoc.CloseCommandBar()
        Me.Top = 0
        Me.Left = 0
        Me.Width = 10000
        Me.Height = 80
        ComboBox1.Enabled = True
        ComboBox2.Enabled = True
        cmdSave.Enabled = True
        cmdFill.Enabled = True
End Sub
在Form的Load事件中定義打開和保存文件的格式,并填充ComboBox數(shù)據(jù)。ComboBox數(shù)據(jù)對應(yīng)數(shù)據(jù)庫表的字段名。
 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        OpenFileDialog1.Title = "打開文件"
        OpenFileDialog1.Filter = "Word文檔(*.doc)|*.doc|Word文檔模板(*.dot)|*.dot"
        SaveFileDialog1.Title = "保存文件"
        SaveFileDialog1.Filter = "Word文檔(*.doc)|*.doc|Word文檔模板(*.dot)|*.dot"
        Dim dt As New DataTable()
        dt = clsDB.GetDataTable("select * from 工程")
        For i = 0 To dt.Columns.Count - 1
            ComboBox1.Items.Add(dt.Columns.Item(i).ColumnName)
        Next
        dt = clsDB.GetDataTable("select * from 校核")
        For i = 0 To dt.Columns.Count - 1
            ComboBox2.Items.Add(dt.Columns.Item(i).ColumnName)
        Next
    End Sub
   '填充數(shù)據(jù)
    Private Sub cmdFill_Click(ByVal sender As System.Object, ByVal e As
System。EventArgs) Handles cmdFill.Click
        clsDoc.InsertValue()
        clsDoc.InsertCollection()
    End Sub
'用戶選擇所插入域的域名,并在光標(biāo)處插入單值域。
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object,
    ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        clsDoc.InsertField(sender.Text)
    End Sub
'用戶選擇所插入域的域名,并在光標(biāo)處插入多值域。
域所對應(yīng)多值時,域只能插入表格中。且要與單值域區(qū)分,標(biāo)記為多值插入。
    Private Sub ComboBox2_SelectedValueChanged(ByVal sender As Object,
    ByVal e As System.EventArgs) Handles ComboBox2.SelectedValueChanged
        Dim KeyWord As String
        KeyWord = sender.Text + "F" '標(biāo)記是多值
        clsDoc.InsertField(KeyWord)
    End Sub
'保存Word文件。
    Private Sub cmdSave_Click(ByVal sender As System.Object,
    ByVal e As System.EventArgs) Handles cmdSave.Click
        clsDoc.SaveWordDocument()
End Sub
'打開Word的命令菜單及工具箱。
Private Sub frmUserWord_Closed(ByVal sender As Object,
ByVal e As System.EventArgs) Handles MyBase.Closed
        clsDoc.OpenCommandBar()
    End Sub
End Class


5.應(yīng)用與測試

  一般,此種應(yīng)用是作為一個軟件的一部分,我們可以把它生成組件來用,方法把項目的輸出類型改為類庫后,把它生成DLL文件就可。這里為了方便測試就直接把它生成應(yīng)用程序。

  下面對它運行時的結(jié)果如下:


  打開一Word文件運行后的界面如下:



結(jié)論

  上面方法介紹了Word域的利用,利用VBA編寫Word域的方法。Word域所對應(yīng)的數(shù)據(jù)庫的字段的單值和多值的關(guān)系,極有普遍性,很有實用價值。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
在VB中創(chuàng)建word文檔?
通過實例來學(xué)習(xí)VBA代碼
VB實例教程之操作Access數(shù)據(jù)庫
Word VBA 學(xué)習(xí)交流(五)
VB.NET自動操作其他程序(3)
VB串口通信
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服