软件编程
位置:首页>> 软件编程>> C#编程>> C#实现合并多个word文档的方法

C#实现合并多个word文档的方法

作者:shichen2014  发布时间:2022-10-02 08:32:39 

标签:C#,word

本文实例讲述了C#实现合并多个word文档的方法,是非常具有实用价值的技巧。分享给大家供大家参考。

具体实现方法如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Office.Interop.Word;
using System.Reflection;
using System.IO;
using System.Diagnostics;

namespace driverexam.WordReport
{
 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#程序设计有一定的借鉴价值。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com