熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

淺析C#合並多個WORD文檔的具體實現方法

2013-11-15 12:51:50  來源: ASP編程 

  今天因為客戶需要需要將多個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

  }

  }


From:http://tw.wingwit.com/Article/program/ASP/201311/21785.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.