需將多份 Word 文件 (b.doc, c.doc...) 內容追加至目標文件 (a.doc) 末尾。常見做法:開啟來源 → 選取/複製 → 切換目標 → 移至末尾 → 貼上,或操作 Range 物件插入。但對複雜物件 (合併儲存格表格等) 易出錯,且頻繁開關文件效能差、資源釋放麻煩。
Word 提供 插入 → 物件 → 來自檔案的文字,可直接將整份文件內容插入游標位置,完整保留格式、表格、圖片等結構。
' VBA
Selection.InsertFile FileName:="C:\Path\b.doc", Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False
' C# (Microsoft.Office.Interop.Word)
object fileName = @"C:\Path\b.doc";
object missing = Type.Missing;
selection.InsertFile(ref fileName, ref missing, ref missing, ref missing, ref missing);
public void MergeDocuments(string targetPath, IEnumerable<string> sourcePaths) {
var app = new Application { Visible = false };
Document target = null;
try {
target = app.Documents.Open(targetPath);
var selection = app.Selection;
selection.EndKey(WdUnits.wdStory); // Ctrl+End
foreach (var src in sourcePaths) {
object file = src;
object missing = Type.Missing;
selection.InsertFile(ref file, ref missing, ref missing, ref missing, ref missing);
// 可選:插入分頁符分隔
selection.InsertBreak(WdBreakType.wdPageBreak);
}
target.Save();
}
finally {
target?.Close();
app.Quit();
// 釋放 COM 物件...
}
}
| 傳統複製貼上 / Range 操作 | InsertFile 方法 |
|---|---|
| 需開啟每份來源文件 | **無需開啟來源**,直接指定路徑 |
| 複雜表格/格式易丟失或錯位 | **完整保留**原文件所有結構與格式 |
| 程式碼冗長、錯誤點多 | **單行 API**,極簡維護 |
| 頻繁切換文件導致閃爍/效能差 | 僅操作目標文件,效能穩定 |
善用 Word 內建 InsertFile / 「來自檔案的文字」** 功能,配合巨集錄製快速取得 API,以最少代碼實現最穩健的文件合併,避開 COM 物件操作的諸多坑點。