using System;
using System.Drawing;
namespace DPExample
{
public abstract class PersonBuilder
{
protected Graphics g;
protected Pen p;
public PersonBuilder(Graphics g, Pen p)
{
this.g = g;
this.p = p;
}
public abstract void BuildHead();
public abstract void BuildBody();
public abstract void BuildArmLeft();
public abstract void BuildArmRight();
public abstract void BuildLegLeft();
public abstract void BuildLegRight();
}
class PersonThinBuilder : PersonBuilder
{
public PersonThinBuilder(Graphics g, Pen p) : base(g, p)
{
}
public override void BuildHead()
{
g.DrawEllipse(p, 50, 20, 30, 30);
}
public override void BuildBody()
{
g.DrawRectangle(p, 60, 50, 10, 50);
}
public override void BuildArmLeft()
{
g.DrawLine (p, 60, 50, 40, 100);
}
public override void BuildArmRight ()
{
g.DrawLine (p, 70, 60, 90, 100);
}
public override void BuildLegLeft()
{
g.DrawLine (p, 60, 100, 45, 150);
}
public override void BuildLegRight()
{
g.DrawLine (p, 70, 100, 85, 150);
}
}
class PersonFatBuilder : PersonBuilder
{
public PersonFatBuilder(Graphics g, Pen p) : base(g, p)
{
}
public override void BuildHead()
{
g.DrawEllipse(p, 50, 20, 30, 30);
}
public override void BuildBody()
{
g.DrawRectangle(p, 45, 50, 40, 50);
}
public override void BuildArmLeft()
{
g.DrawLine (p, 50, 50, 30, 100);
}
public override void BuildArmRight ()
{
g.DrawLine (p, 80, 50, 30, 100);
}
public override void BuildLegLeft()
{
g.DrawLine (p, 60, 100, 45, 150);
}
public override void BuildLegRight()
{
g.DrawLine (p, 70, 100, 85, 150);
}
}
class PersonDirector
{
private PersonBuilder pb;
public PersonDirector(PersonBuilder pb)
{
this.pb = pb;
}
public void CreatePerson()
{
pb.BuildHead();
pb.BuildBody ();
pb.BuildArmLeft();
pb.BuildArmRight ();
pb.BuildLegLeft();
pb.BuildLegRight();
}
}
}
前由 我有全區的電話資料,問題在於我要依不同里別來製作出電話簿。結果如下圖: 單純採用合併列印無法達成我的需求。解決方法係用「功能變數」儲存上一個里別,與現在里別進行比較:若不同,則換頁。不過,這樣功能變數還蠻長的。最後,我還是採用 C# 來解決。 解決方案 用 C# 控制 WORD 中合併列印的「資料來源 Data Source」,給予不同里別的「sqlstatement」。迴圈處理不同的里別即可。但可預見其處理過程會很慢,不過還好,我可以不用在意它,有跑出結果即可。 程式碼 IList<string> areas = new List<string>() { "後壁", "侯伯", "嘉苳", "土溝", "嘉田", "嘉民", "菁豊", "崁頂", "後廍", "墨林", "菁寮", "新嘉", "頂長", "平安", "仕安", "竹新", "新東", "長安", "頂安", "福安", "烏樹" }; string root = @"D:\"; // 根目錄 string data = root + @"\data.docm"; // 資料檔(即資料來源) string template = root + @"\template.docx"; // 已設定好格式與合併欄位的 Word 檔 string output = @"d:\Final"; // 輸出之資料夾 object oMissing = System.Reflection.Missing.Va...


留言
張貼留言