您的位置:首页 > 编程语言 > C#

艾伟_转载:用C#编程合并多个WORD文档

2011-08-29 00:21 393 查看
今天因为客户需要,需要将多个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
{
///
/// Word文档合并类
///
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 循环合并多个文件(复制合并重复的文件)
///
/// 循环合并多个文件(复制合并重复的文件)
///
/// 模板文件
/// 需要合并的文件
/// 合并后的输出文件
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;
}
}
///
/// 循环合并多个文件(复制合并重复的文件)
///
/// 模板文件
/// 需要合并的文件
/// 合并后的输出文件
public void CopyMerge(string tempDoc, string strCopyFolder, string outDoc)
{
string[] arrFiles = Directory.GetFiles(strCopyFolder);
CopyMerge(tempDoc, arrFiles, outDoc);
}
#endregion

#region 循环合并多个文件(插入合并文件)
///
/// 循环合并多个文件(插入合并文件)
///
/// 模板文件
/// 需要合并的文件
/// 合并后的输出文件
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;
}
}
///
/// 循环合并多个文件(插入合并文件)
///
/// 模板文件
/// 需要合并的文件
/// 合并后的输出文件
public void InsertMerge(string tempDoc, string strCopyFolder, string outDoc)
{
string[] arrFiles = Directory.GetFiles(strCopyFolder);
InsertMerge(tempDoc, arrFiles, outDoc);
}
#endregion
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: