C#把多个Word文档合并成一个的方法


  由于客户需要,需要将多个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
 
  }
 
  }
http://www.qqread.com/csharp/p494663.html


 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值