浅析C#合并多个WORD文档的具体实现方法
http://www.chinacs.net/a/csharp/2010/0724/36.html
今天因為客戶需要,需要將多個WORD文檔合并成為一個WORD文檔。其中,對WORD文檔的合并方式分兩種形式:
一是復制合并;
一是插入合并,即將多個文檔按照先后順序合并到另一個文檔中.
代碼如下:
?
using?System;?
?
using?System.Collections.Generic;?
?
using?System.Text;?
?
using?Microsoft.Office.Interop.Word;?
?
using?System.Reflection;?
?
using?System.IO;?
?
using?System.Diagnostics;?
?
namespace?Eipsoft.Common?
?
{?
?
///?<summary>?
?
///?Word文檔合并類?
?
///?</summary>?
?
public?class?WordDocumentMerger?
?
{?
?
private?ApplicationClass?objApp?=?null;?
?
private?Document?objDocLast?=?null;?
?
private?Document?objDocBeforeLast?=?null;?
?
public?WordDocumentMerger()?
?
{?
?
objApp?=?new?ApplicationClass();?
?
}?
?
#region?打開文件?
?
private?void?Open(string?tempDoc)?
?
{?
?
object?objTempDoc?=?tempDoc;?
?
object?objMissing?=?System.Reflection.Missing.Value;?
?
objDocLast?=?objApp.Documents.Open(?
?
ref?objTempDoc,????//FileName?
?
ref?objMissing,???//ConfirmVersions?
?
ref?objMissing,???//ReadOnly?
?
ref?objMissing,???//AddToRecentFiles?
?
ref?objMissing,???//PasswordDocument?
?
ref?objMissing,???//PasswordTemplate?
?
ref?objMissing,???//Revert?
?
ref?objMissing,???//WritePasswordDocument?
?
ref?objMissing,???//WritePasswordTemplate?
?
ref?objMissing,???//Format?
?
ref?objMissing,???//Enconding?
?
ref?objMissing,???//Visible?
?
ref?objMissing,???//OpenAndRepair?
?
ref?objMissing,??//DocumentDirection?
?
ref?objMissing,??//NoEncodingDialog?
?
ref?objMissing???//XMLTransform?
?
);?
?
objDocLast.Activate();?
?
}?
?
#endregion?
?
#region?保存文件到輸出模板?
?
private?void?SaveAs(string?outDoc)?
?
{?
?
object?objMissing?=?System.Reflection.Missing.Value;?
?
object?objOutDoc?=?outDoc;?
?
objDocLast.SaveAs(?
?
ref?objOutDoc,????//FileName?
?
ref?objMissing,???//FileFormat?
?
ref?objMissing,???//LockComments?
?
ref?objMissing,????//PassWord?
?
ref?objMissing,????//AddToRecentFiles?
?
ref?objMissing,????//WritePassword?
?
ref?objMissing,????//ReadOnlyRecommended?
?
ref?objMissing,????//EmbedTrueTypeFonts?
?
ref?objMissing,????//SaveNativePictureFormat?
?
ref?objMissing,????//SaveFormsData?
?
ref?objMissing,????//SaveAsAOCELetter,?
?
ref?objMissing,????//Encoding?
?
ref?objMissing,????//InsertLineBreaks?
?
ref?objMissing,????//AllowSubstitutions?
?
ref?objMissing,????//LineEnding?
?
ref?objMissing?????//AddBiDiMarks?
?
);?
?
}?
endregion?
?
#region?循環合并多個文件(復制合并重復的文件)?
?
///?<summary>???///?循環合并多個文件(復制合并重復的文件)???///?</summary>?
?
///?<param?name="tempDoc">模板文件</param>?
?
///?<param?name="arrCopies">需要合并的文件</param>?
?
///?<param?name="outDoc">合并后的輸出文件</param>?
?
public?void?CopyMerge(string?tempDoc,?string[]?arrCopies,?string?outDoc)?
?
{?
?
object?objMissing?=?Missing.Value;?
?
object?objFalse?=?false;?
?
object?objTarget?=?WdMergeTarget.wdMergeTargetSelected;?
?
object?objUseFormatFrom?=?WdUseFormattingFrom.wdFormattingFromSelected;?
?
try?????????????{?
?
//打開模板文件?
?
Open(tempDoc);?
?
foreach?(string?strCopy?in?arrCopies)?
?
{????objDocLast.Merge(?strCopy,?
?
//FileName?
?
ref?objTarget,?????//MergeTarget?
?
ref?objMissing,?????????//DetectFormatChanges?
?
ref?objUseFormatFrom,???//UseFormattingFrom?
?
ref?objMissing??????????//AddToRecentFiles?
?
);?
?
objDocBeforeLast?=?objDocLast;?
?
objDocLast?=?objApp.ActiveDocument;?
?
if?(objDocBeforeLast?!=?null)?
?
{?
?
objDocBeforeLast.Close(?
?
ref?objFalse,?????//SaveChanges?
?
ref?objMissing,???//OriginalFormat?
?
ref?objMissing????//RouteDocument?
?
);?
?
}?
?
}?
?
//保存到輸出文件?
?
SaveAs(outDoc);?
?
foreach?(Document?objDocument?in?objApp.Documents)?
?
{?
?
objDocument.Close(?
?
ref?objFalse,?????//SaveChanges?
?
ref?objMissing,???//OriginalFormat?
?
ref?objMissing????//RouteDocument?
?
);?
?
}?
?
}?
?
finally?
?
{?
?
objApp.Quit(?
?
ref?objMissing,?????//SaveChanges?
?
ref?objMissing,?????//OriginalFormat?
?
ref?objMissing??????//RoutDocument?
?
);?
?
objApp?=?null;?
?
}?
?
}?
?
///?<summary>??????????///?循環合并多個文件(復制合并重復的文件)??????????///?</summary>?
?
///?<param?name="tempDoc">模板文件</param>?
?
///?<param?name="arrCopies">需要合并的文件</param>?
?
///?<param?name="outDoc">合并后的輸出文件</param>?
?
public?void?CopyMerge(string?tempDoc,?string?strCopyFolder,?string?outDoc)?
?
{?
?
string[]?arrFiles?=?Directory.GetFiles(strCopyFolder);?
?
CopyMerge(tempDoc,?arrFiles,?outDoc);?
?
}?
?
#endregion?
?
#region?循環合并多個文件(插入合并文件)?
?
///?<summary>??????????///?循環合并多個文件(插入合并文件)??///?</summary>?
?
///?<param?name="tempDoc">模板文件</param>?
?
///?<param?name="arrCopies">需要合并的文件</param>?
?
///?<param?name="outDoc">合并后的輸出文件</param>?
?
public?void?InsertMerge(string?tempDoc,?string[]?arrCopies,?string?outDoc)?
?
{?
?
object?objMissing?=?Missing.Value;?
?
object?objFalse?=?false;?
?
object?confirmConversion?=?false;?
?
object?link?=?false;?
?
object?attachment?=?false;?
?
try?
?
{?
?
//打開模板文件?
?
Open(tempDoc);?
?
foreach?(string?strCopy?in?arrCopies)?
?
{?
?
objApp.Selection.InsertFile(?
?
strCopy,?
?
ref?objMissing,?
?
ref?confirmConversion,?
?
ref?link,?
?
ref?attachment?
?
);?
?
}?
?
//保存到輸出文件???
?
??????SaveAs(outDoc);?
?
foreach?(Document?objDocument?in?objApp.Documents)?
?
{?
?
objDocument.Close(?
?
ref?objFalse,?????//SaveChanges?
?
ref?objMissing,???//OriginalFormat?
?
ref?objMissing????//RouteDocument?
?
);?
?
}?
?
}?
?
finally?
?
{?
?
objApp.Quit(?
?
ref?objMissing,?????//SaveChanges?
?
ref?objMissing,?????//OriginalFormat?
?
ref?objMissing??????//RoutDocument?
?
);?
?
objApp?=?null;?
?
}?
?
}?
?
///?<summary>?
?
///?循環合并多個文件(插入合并文件)?
?
///?</summary>?
?
///?<param?name="tempDoc">模板文件</param>?
?
///?<param?name="arrCopies">需要合并的文件</param>?
?
///?<param?name="outDoc">合并后的輸出文件</param>?
?
public?void?InsertMerge(string?tempDoc,?string?strCopyFolder,?string?outDoc)?
?
{?
?
string[]?arrFiles?=?Directory.GetFiles(strCopyFolder);?
?
InsertMerge(tempDoc,?arrFiles,?outDoc);?
?
}?
?
#endregion?
?
}?
?
}?
?
總結
以上是生活随笔為你收集整理的浅析C#合并多个WORD文档的具体实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pdg文件怎么打开?pdg是什么文件?
- 下一篇: c# char unsigned_dll