今天因为客户需要需要将多个WORD文档合并成为一个WORD文档其中对WORD文档的合并方式分两种形式
一是复制合并;
一是插入合并即将多个文档按照先后顺序合并到另一个文档中
代码如下:
using System;
using SystemCollectionsGeneric;
using SystemText;
using MicrosoftOfficeInteropWord;
using SystemReflection;
using SystemIO;
using SystemDiagnostics;
namespace EipsoftCommon
{
/// <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 = SystemReflectionMissingValue;
objDocLast = objAppDocumentsOpen(
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
);
objDocLastActivate();
}
#endregion
#region 保存文件到输出模板
private void SaveAs(string outDoc)
{
object objMissing = SystemReflectionMissingValue;
object objOutDoc = outDoc;
objDocLastSaveAs(
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 = MissingValue;
object objFalse = false;
object objTarget = WdMergeTargetwdMergeTargetSelected;
object objUseFormatFrom = WdUseFormattingFromwdFormattingFromSelected;
try {
//打开模板文件
Open(tempDoc);
foreach (string strCopy in arrCopies)
{ objDocLastMerge( strCopy
//FileName
ref objTarget //MergeTarget
ref objMissing //DetectFormatChanges
ref objUseFormatFrom //UseFormattingFrom
ref objMissing //AddToRecentFiles
);
objDocBeforeLast = objDocLast;
objDocLast = objAppActiveDocument;
if (objDocBeforeLast != null)
{
objDocBeforeLastClose(
ref objFalse //SaveChanges
ref objMissing //OriginalFormat
ref objMissing //RouteDocument
);
}
}
//保存到输出文件
SaveAs(outDoc);
foreach (Document objDocument in objAppDocuments)
{
objDocumentClose(
ref objFalse //SaveChanges
ref objMissing //OriginalFormat
ref objMissing //RouteDocument
);
}
}
finally
{
objAppQuit(
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 = DirectoryGetFiles(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 = MissingValue;
object objFalse = false;
object confirmConversion = false;
object link = false;
object attachment = false;
try
{
//打开模板文件
Open(tempDoc);
foreach (string strCopy in arrCopies)
{
objAppSelectionInsertFile(
strCopy
ref objMissing
ref confirmConversion
ref link
ref attachment
);
}
//保存到输出文件
SaveAs(outDoc);
foreach (Document objDocument in objAppDocuments)
{
objDocumentClose(
ref objFalse //SaveChanges
ref objMissing //OriginalFormat
ref objMissing //RouteDocument
);
}
}
finally
{
objAppQuit(
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 = DirectoryGetFiles(strCopyFolder);
InsertMerge(tempDoc arrFiles outDoc);
}
#endregion
}
}