今天因为客户需要,需要将多个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文档
链接:http://www.cnblogs.com/madengwei/archive/2009/09/26/1574570.html
【编辑推荐】