閆婷婷
吉林師范大學, 吉林 四平 136000
通過Access窗口進行交互式信息選擇、錄入及外部數據導入,輸入工號,根據人員所屬不同類型賬號直接讀取關聯信息,實現了自動選擇人員賬號、變更類型、自動輸入基礎信息的自動填寫功能;重新填寫可通過清空記錄按鈕實現一鍵清除已填寫信息的功能,最終實現將所有停退保人員信息批量寫入新的Word表格模板,并根據記錄數量實現自動分頁存儲、打印預覽(打?。┕δ?。
首先新建一個名為DbTChange.mdb的Access數據庫,并將“空白模板.doc”和數據庫DbTChange.mdb放到同一個目錄下。在庫中創建停退保信息表、停退保類型表、BN工號_醫保編號對照表和BW工號_醫保編號對照表,共4個表。停退保信息表是依據Word模板所需的字段信息來設計表的結構,每一個進行變更的人員相關信息最后都存在這個表中。停退保類型表僅僅用來存儲一列有效信息,將用于存儲所有停退保類型,此表用于組合框值列表,應用于數據錄入時的類型選擇,避免了手工輸入的麻煩[1]。BN工號-醫保編號對照表和BW工號-醫保編號對照表為兩種不同類型人員的基本信息和醫保信息關聯對照表,兩張表結構完全相同,在實際應用中可根據人員情況進行相應修改,這兩張表用于人員信息自動錄入,即在信息錄入窗口輸入工號后回車,即可將醫保編號和姓名關聯取出寫入窗口,既節省時間又準確無誤。另外,根據情況不同,可分別對兩張表格的字段進行擴充。
根據具體情況,可以選擇通過外部數據導入,即將Excel導入Access中,也可以在Access窗體上通過文本錄入,將停退保人員信息錄入。在這個過程中,人員類型和變更類型都是通過組合框的應用和設置來實現自動填充的,添加成功后在子窗體中實時顯示查看[2]。
傳統的方式主要是基于書簽、Word郵件合并以及插入域的方式,來實現將Excel或Access數據庫表中的內容逐條按字段寫入Word模板,但僅針對每一條記錄多個字段寫入一個模板,也有通過跨數據表或數據庫聯合查詢的,但無一例外都是一條記錄的N個字段對應Word模板,多條數據循環生成多個模板文檔。針對向一個表格模板中導入多條數據多個字段,并根據表格模板容量自動分頁生成新文檔的情況并沒有相關案例,本文對這種情況的模板套打提出了解決辦法并得以實現。
首先要創建一個基于Word表格模板的文檔,新建數據記錄集用于獲取待處理的所有記錄,然后將記錄集內容按字段賦值給Word表格單元格,并根據記錄數循環分頁,最后實現打印預覽功能。如需要直接打印,可將代碼doc.PrintPreview改為doc.Print即可。
Private Sub CmdSave_Click()
......
MyPath=CurrentProject.Path
Set rs=CurrentDb.OpenRecordset("停退保信息表")
rs.MoveLast
rs.MoveFirst
lr=rs.RecordCount
maxRs=9
p=countPage(lr,maxRs)
m=0
For I=1 To p
Set mydoc=doc.Documents.Add(MyPath&"空白模板.doc")
doc.Visible=False
Set Ttable=doc.ActiveDocument.Tables(1)
For j=1 To maxRs
If rs.EOF Then Exit Sub
Ttable.Cell(j+1,2).Range.Text=rs.Fields.Item(1)&""
......
Ttable.Cell(j+1,8).Range.Text=rs.Fields.Item(7)&""
doc.PrintPreview
rs.MoveNext
Next
m=m+1
mydoc.SaveAs MyPath&"醫療保險參保人員停保、退保變更登記表"&m&".doc"
Next
End Sub
以上代碼中記錄集rs和doc.ActiveDocument.Tables(1)的應用至關重要,其中的rs.fields.item(i)理解為將數據表中的內容放入記錄集后,i相當于字段列所處序號,然后通過rs.MoveNext實現數據行的變更;舍棄常用的書簽bookmark,直接采用Ttable.Cell(j+1,2).Range.Text來向模板的Word表格指定單元格中寫入內容,這里的Cell()函數使用上需要特別注意,起點是從0開始而不是1。將mydoc.SaveAs MyPath&"醫療保險參保人員停保、退保變更登記表"&m&".doc"這段代碼放入循環,實現新建Word文檔的重新命名和保存。
我們將頁碼計算單獨放在一個函數中,這樣提高了代碼的可移植性和效率,當模板發生變更時,此功能無需修改依然可用。利用記錄總數和模板的最多容納記錄數來計算總的頁數,需要注意在獲取記錄總數lr前要先把記錄集的位置移到最后,否則將得不到記錄總數。
利用組合框來實現職工類型選擇,組合框的值設為BN工號-醫保編號對照表和BW工號-醫保編號對照表,即存放不同賬號類型人員信息的數據庫表名,輸入工號以后程序自動匹配姓名和醫保編號。
綜上,根據固定模板填充數據的工作,一旦業務量大,信息來源多,純手工粘貼復制,或者單純的引用函數就無法滿足工作需求。文章采用記錄集循環、分頁判斷、Word表格Cell()用法解決了使用書簽、郵件合并以及域方式實現模板套打無法滿足多條記錄分頁填充批量打印的問題,適應不同信息源和打印模板,簡便靈活。