首頁‎ > ‎電子期刊‎ > ‎2008年8月號‎ > ‎

Aspose.Word元件介紹(下)


摘要

  • 文章編號:
  • 投稿日期:2008/8/2
  • 作者:張騉翔
  • 第一次審查:
  • 第二次審查:
  • 第三次審查:
  • 備註:


Aspose.Word元件介紹(上)中 介紹了Aspose.Word元件的基本用法,在本文中會介紹Aspose.Word元件的合併列印功能,會以專文介紹合併列印功能,主要是在使用校務行 政系統時,時常會有將資料匯出成為Word文件的需求,例如學生證;假設是系統已寫好的格式輸出,那麼會缺乏彈性,所以運用Aspose.Word合併列 印的方式來取得系統資料輸出到Word,最大的好處是Word的格式可以完全量身訂做。

合併列印觀念

當我們要產生多份的文件,而它們的文件格式都是一致的,只有資料內容不一樣,例如學生證、成績單、信封…等等,若是要根據每筆資料手動來複製貼上成 我們要的文件,會顯的相當麻煩;可以使用Word合併列印的功能來解決這個問題,合併列印的觀念是將文件分為樣版文件以及資料源文件,而在樣版文件中可以 設定變數,例如姓名變數、地址變數、性別變數…等等,Word可以針對變數名稱去讀取資料源文件相對應的值而自動產生最後所需要的多份文件。

底下將合併列印所需要的元素做個說明:

  • 資料來源:例如為學生證的資料來源,多筆的學生資料,內含有學生姓名、學生學生證號碼、姓別…等等。
  • 合併列印程式:若使用Word軟體來進行合併列印,那麼合併列印程式為Word軟體,若是使用Aspose.Word元件,那麼合併列 印程式為Word合併列印樣本與Aspose.Word元件的搭配,在Word的合併列印樣本當中可以設定合併列印變數,而在Aspose.Word會將 之讀入來進行實際合併列印的動作。
  • 合併列印樣本:為Word檔案,裡面存放如學生證範本。
  • 合併列印結果檔:最後的結果檔案,以學生證範例為例,會有多筆實際的學生證表格內有實際學生資料。

Aspose.Word與合併列印

本文主要目的在於介紹如何使用Aspose.Word元件來進行合併列印;在使用Aspose.Word元件來進行合併列印時需使用Word 建立一般文件,用此文件當作樣版,此樣版的副檔名為doc或是docx,而非Word專屬的樣版文件格式dot。

在Word文件中,會新增合併列印相關的欄位,然後在程式當中會將要放置到樣版裡的資料欄位與合併列印欄位做對應,最後用Aspose.Word的方法進行實際列印的動作。底下我們舉一個簡單的例子來說明這個過程:

步驟一:在Word檔案中加入合併列印變數

首先我們在Word裡插入合併列印變數,插入合併列印變數的地方在插入頁面,然後選到快速組件


接下來在快速組件裡面選擇功能變數。

出現了功能變數的畫面之後,功能變數名稱選擇MergeField,然後在欄位名稱輸入欲新增的欄位名稱,接下來按確定新增。

以筆者而言新增的功能變數如下。

以筆者而言新增的功能變數如下。

步驟二:撰寫程式運用Aspose元件將資料傳至合併列印變數

接下來開啟Vistual Studio 2005的C#專案,鍵入以下的程式,讀者可注意程式碼註解之處:

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Aspose.Words;
using Aspose.Words.Reporting; //在使用合併列印功能時需引用此命名空間。
 
namespace MergeField
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
 
private void button1_Click(object sender, EventArgs e)
{
Document doc = new Document("MergeTemplate.docx"); //建立Aspose的Document物件,並將合併列印的樣版讀入。
 

doc.MailMerge.Execute(GetDataSource()); //執行合併列印過程,運用Excute方法,並傳入DataTable物件,在此DataTable由GetDataSource()函數傳回。
 
doc.Save("MergeResult.docx");
}
 
private DataTable GetDataSource()
{
DataTable table = new DataTable();
 
table.Columns.Add("學生姓名");
table.Columns.Add("電話");
 
table.Rows.Add("張三","03-5555555");
table.Rows.Add("李四","03-5522555");
table.Rows.Add("王武","03-5554455");
 
return table;
}
}
}

步驟三:合併列印結果

最後我們看到合併列印結果:


底下的連結為範例檔案,供您下載參考。

http://dev.intellischool.com.tw/downloads/SmartSchoolPlugin/Examples/MergeField.zip

Aspose.Word合併列印事件

我們使用Aspose.Word元件來進行合併列印時,會想將資料做些處理,例如將姓名前面加上特殊符號,此時可以運用Aspose.Word的合併列印事件來處理,底下除列出程式碼外並以條列的方式對於新增的程式碼做說明。

新增合併欄位事件

新增合併欄位事件,事件名稱為MailMerge_MergeField。

doc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField);

宣告合併列印事件

宣告合併列印事件MailMerge_MergeField,其中重要的參數為e,可以取得合併列印過程中的所有資料。

private void MailMerge_MergeField(object sender, Aspose.Words.Reporting.MergeFieldEventArgs e)

取得合併列印資料

  • 運用e變數可以取得合併列印資料,其中e.FieldName為目前合併列印的欄位名稱;e.FieldValue為目前合併列印的欄位值,而運用e.Text可以改變其值。
if (e.FieldName == "學生姓名" ) 
if (e.FieldValue.ToString()=="張三")
e.Text="*張三";

完整程式碼

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Aspose.Words;
using Aspose.Words.Reporting; //在使用合併列印功能時需引用此命名空間。
 

namespace MergeField
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
 
private void button1_Click(object sender, EventArgs e)
{
 
Document doc = new Document("MergeTemplate.docx");
 
doc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField);
 
doc.MailMerge.Execute(GetDataSource());
 
doc.Save("MergeResult.docx");
}
 
//傳回合併列印的資料,傳回的資料可以是下列型態:DataSet、DataTable、DataView、DataSet、IDataReader。
private DataTable GetDataSource()
{
DataTable table = new DataTable();
 
table.Columns.Add("學生姓名");
table.Columns.Add("電話");
 
table.Rows.Add("張三","03-5555555");
table.Rows.Add("李四","03-5522555");
table.Rows.Add("王武","03-5554455");
 
return table;
}
 
private void MailMerge_MergeField(object sender, Aspose.Words.Reporting.MergeFieldEventArgs e)
{
if (e.FieldName == "學生姓名" )
{
 
if (e.FieldValue.ToString()=="張三")
e.Text="*張三";
}
}
}
}

小結

本篇介紹有關Aspose.Word元件在合併列印上的功能,合併列印的功能相當重要,尤其是對於系統要輸出報表,藉由合併列印的觀念及功能我們才能高度的客製化出我們所需的報表,未來的文章我們會以實際的範例來說明應用。






Comments