張春雷
(山東英才學院,山東 濟南 250104)
作為信息化系統(tǒng)的重要組成部分,數(shù)據(jù)收集、數(shù)據(jù)處理和格式輸出是企事業(yè)單位日常辦公管理中的三個重要環(huán)節(jié)[1]。其中,數(shù)據(jù)收集,近幾年已經(jīng)發(fā)展出了非常成熟的市場產(chǎn)品,如:問卷星、騰訊文檔、金山文檔等,但數(shù)據(jù)處理和格式輸出一般分別用Excel 和Word進行處理。Excel作為進行數(shù)據(jù)處理的主流的辦公軟件,很多情況下,都可以作為一個小型數(shù)據(jù)庫,存儲各種原始數(shù)據(jù),并能夠進行匯總、計算、篩選等數(shù)據(jù)處理;若要對這些數(shù)據(jù)進行排版和打印,通常需要用Word 文檔以特定的組織形式來完成[2]。如何將二者進行無縫銜接,更高效地對數(shù)據(jù)進行處理和展示,相關研究較少,更沒有成熟的產(chǎn)品。
本文以日常辦公使用最多的Office辦公軟件為基礎進行二次開發(fā),提出了一種以Word 模板為格式輸出報表,以Excel為數(shù)據(jù)處理和存儲工具,設計了一種Excel通用報表打印插件,降低了報表設計的難度,使得報表設計工作可以由程序開發(fā)人員交給軟件使用人員,降低了報表設計門檻,減輕了程序設計人員的工作量。
因近幾年在線數(shù)據(jù)采集的互聯(lián)網(wǎng)產(chǎn)品的成熟,我們可能會經(jīng)常使用在線表格收集數(shù)據(jù),或通過各種業(yè)務系統(tǒng)導出數(shù)據(jù),這些數(shù)據(jù)往往是以Excel 的形式存在的。為了更好地使用這些數(shù)據(jù),可能會需要將這些數(shù)據(jù)以各種不同的排版格式打印出來。如果僅僅依靠粘貼、拷貝,一是工作量大,二是也容易出錯;如果開發(fā)相應的報表系統(tǒng),又會因為報表格式?jīng)]有統(tǒng)一的樣式,開發(fā)工作量同樣也巨大。因此,在完成了原始數(shù)據(jù)的采集、匯總的第一步后,通常還需要將其按照特定要求,轉為符合指定格式要求的文檔,方便歸檔和打印。
常用報表開發(fā)設計工具把報表在形式上分解成四個部分:標題區(qū)、表頭區(qū)、表體區(qū)和表尾區(qū),然后對每個部分采用逐個定義的方法,操作煩瑣、專業(yè)性強,難以滿足用戶定制報表格式及臨時報表生成的要求[3]。
根據(jù)報表內(nèi)容是否變化,本文將報表設計分解為兩部分,一是報表格式的設計,這一部分主要包括標題、頁眉、頁腳、表頭等在不同場景下不會變化的元素,主要依靠Word 功能實現(xiàn);另一部分是報表數(shù)據(jù),這一部分主要包括動態(tài)變化的數(shù)據(jù)、匯總信息等,在設計好的報表中,在報表中需要輸出數(shù)據(jù)的位置插入書簽,如圖1 所示,書簽名對應Excel 表格中列的標題名。

圖1 Word中的插入【書簽】功能
利用Excel 文檔進行數(shù)據(jù)處理,Word 文檔進行報表格式的設計后,可以使用Microsoft Word 的“郵件合并”功能,實現(xiàn)將Excel 的表格數(shù)據(jù)批量地轉換為Word 報表[4]。Excel 表的一行對應一個報表,Excel 表所有記錄對應整份報表。
某學院要為某專業(yè)的畢業(yè)生進行畢業(yè)論文答辯,需要打印答辯成績表,從“大學生畢業(yè)設計(論文)管理系統(tǒng)”中導出學生信息如下,包括題目、學生姓名、學號、班級、指導教師、職稱等字段信息,文件格式是Excel文件,如圖2所示。

圖2 Excel報表打印數(shù)據(jù)
1)開始郵件合并
打開Word 模板,選擇【郵件】→【開始郵件合并】→【信函】按鈕,如圖3所示。
2)選擇數(shù)據(jù)源
用鼠標單擊下拉列表【選擇收件人】,然后選擇【使用現(xiàn)有列表】菜單項。在“選擇數(shù)據(jù)源”窗口中,找到存儲“圖2 數(shù)據(jù)”的Excel 文件,確認;然后在圖4 所示的界面中選擇“答辯成績表”工作表,單擊【確定】按鈕。

圖4 選擇“數(shù)據(jù)源”界面
3)插入合并域
將光標置于插入點處,單擊工具欄菜單的【插入合并域】,從彈出的列表中選擇相對應的字段插入,對每一插入點,都需要重復執(zhí)行這一操作,如圖5所示。

圖5 “插入合并域”界面
4)生成合并文檔
用鼠標單擊【郵件】→【完成并合并】→【編輯單個文檔】→【全部】→【確定】按鈕,便可將Excel表格數(shù)據(jù)轉換成Word模板樣式的本次參加答辯學生的預填寫完相關內(nèi)容的答辯成績表。
從前面的介紹可以看出,雖然Word 的“郵件合并”功能強大,但操作步驟煩瑣,對使用人員要求較高,不易掌握,本文利用Visual Studio 2022 對Excel 進行二次開發(fā),將Word 的“郵件合并”功能集成進Excel插件,簡化了使用“郵件合并”的步驟,降低了使用門檻,并且插件還具有Word 模板的集中管理和分發(fā)的功能,將Word模板的制作和插件的使用分開,進一步降低了最終插件使用人員的技術要求。
VSTO(Visual Studio Tools for Office)是VBA 的替代,使得開發(fā)Office 應用程序更加簡單[5],是微軟推出的.NET 環(huán)境下Office 應用程序開發(fā)包[6]。VSTO 還提供了增強的Office 對象,可以用它們來編程。可以利用VSTO增強Excel的功能,如添加.NET控件,然后把數(shù)據(jù)直接綁定到控件上。
利用VSTO可以很容易地擴展Excel的功能,實現(xiàn)將Excel數(shù)據(jù)填充到Word報表模板中的功能,界面如圖6所示。

圖6 Excel功能擴展界面
打開Visual Studio 2022,選擇【新建】→【項目】,彈出如下的“創(chuàng)建新項目”界面,在右側選擇“Excel VSTO外接程序”,點擊【下一步】,即可創(chuàng)建一個新的VSTO項目。
在新創(chuàng)建的VSTO項目中可以創(chuàng)建新的Excel“功能區(qū)”以實現(xiàn)Excel 功能的拓展,“圖6 Excel 功能擴展界面”中【輸出到Word】功能按鈕就是利用Word 對象的MailMerge 對象,程序化地實現(xiàn)Word的郵件合并功能,其邏輯流程如圖7所示。

圖7 輸出到Word流程圖
在圖6中點擊【W(wǎng)ord報表】右下角擴展按鈕,可以彈出如圖8 所示界面的對話框,該對話框可實現(xiàn)對Word報表模板的上傳、下載管理等管理功能。

圖8 報表插件的擴展功能
借助VSTO平臺所提供的功能,定制和擴展了Excel應用程序的功能,實現(xiàn)了以下3個方面的功能。
1)報表模板設計
利用WPS 或Word 等辦公軟件,根據(jù)具體的業(yè)務需求定制報表模板,設置報表靜態(tài)格式信息,然后,在適當?shù)奈恢貌迦霕撕灅擞洠庉嬈鋵傩浴?/p>
2)上傳模板
用戶將制作好的報表Word 模板利用Excel 插件上傳到數(shù)據(jù)庫中,可以對上傳的模板進行替換、刪除等操作。
3)生成Word報表
打開整理好的Excel數(shù)據(jù),利用插件擴展程序,根據(jù)選定的Word 模板,生成下載填充完數(shù)據(jù)的Word文件。