作者:張如媚 / 臺灣大學計算機及資訊網路中心程式設計組幹事
系統開發時常會有匯出表單、報表等需求,除了直接以HTML格式轉換成Word、Excel等檔案外,還可能會需要將資料套入既有表格,當資料量大時,如何讓使用者能快速又方便的達到目的呢?今天來介紹如何利用Word合併列印達成批次匯出大量表單。
合併列印的好處
校務系統有許多匯出表單、報表等需求,除了常見的直接以HTML格式轉換成Word、Excel等檔案外,還可能會需要將資料套入既有表格,以往大多使用Crystal Report,後來慢慢的有元件支援PDF,但這些都需要額外的元件輔助,且需要開發者自行繪製表格內容,當格式有些微異動,程式師就必須耗費許多時間來調整。
再則是下載的速度,好不容易表格調整到讓使用者滿意,但因批次匯出的表單數量太多,光在伺服器上合併,都必須耗費好一段時間,還得把整份合併好的表格下載到使用者端,更是久到會讓使用者懷疑電腦當機。
利用Word合併列印,僅需一個Word檔,和一份資料清單即可;Word檔,可直接請使用者提供,程式師不必再做多餘修飾,僅需將資料欄位代入正確位置;而資料清單可以接受access、word、excel等許多格式。在此範例中,為了盡量減少除了實際資料內容外多餘的資料,選擇文字格式(.txt)做示範。txt文字檔內,多筆資料是以斷行表示,而以逗號分隔欄位,必須特別注意的是,因為以逗號分隔,所以欄位內容不得有半形逗號,或是另外以半形雙引號括住,表示一個欄位。
合併列印實作
由於必須在使用者端執行合併列印的動作,所以本文將以JavaScript為範例進行測試。
首先,請準備合併用的Word文件*.doc(圖1),及測試資料來源*.txt(圖2),並將兩個檔案做好欄位的連結(本文著重於程式撰寫的部份,請自行搜尋如何製作合併列印文件)。
圖1:合併列印檔案內容
圖2:合併資料清單
接著,請開啟記事本,或任何您習慣撰寫程式之環境,建立一個*.js的JavaScript指令檔,主要是用來呼叫Word執行合併列印(script內容如圖3);存檔後,於檔案總管找到該檔案,以滑鼠左鍵快點兩下執行指令,執行結束後,就會以Word顯示完成合併的檔案(圖4),如此即完成合併列印的動作。
圖3:JavaScript內容
圖4:合併列印執行結果
為了讓使用者的操作步驟減到最少,可以將來源資料,連同執行合併的動作,整合在同一段script中(圖5)。承辦人下載Word文件至特定目錄後(若格式未變更,就不須重覆下載),按下執行合併,後端程式會產生該次合併所需的script,內容包含將來源資料寫入特定目錄中的文字檔,以及合併列印的指令,組合成.js檔,下載至使用者端,最後由使用者端執行。整個動作一氣呵成,使用者不必再去尋找下載的檔案做合併,對承辦人員來說相對簡單且快速。
圖5:後端整合執行合併列印(C#)
合併列印使用時機
網頁合併列印的匯出方式,需要使用者端有安裝Word,適合同時列印大批相同表單,且套入不同的資料,例如校務系統中的聘書、通知單,及各式名冊。因伺服端僅送出必須的資料與少許程式碼,實際傳輸的資料量大幅縮減,下載後於使用者端執行合併,不佔用伺服器資源,讓匯出下載更加快速。