淺析C#合并多個WORD文檔的具體實現(xiàn)方法
作者:馬偉 
  這里將介紹的是C#合并多個WORD文檔的具體實現(xiàn)方法,這也是在日常工作中會用到的方法。
 今天因為客戶需要,需要將多個WORD文檔合并成為一個WORD文檔。其中,對WORD文檔的合并方式分兩種形式:
一是復(fù)制合并;
一是插入合并,即將多個文檔按照先后順序合并到另一個文檔中.
代碼如下:
- 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 循環(huán)合并多個文件(復(fù)制合并重復(fù)的文件)
 - /// <summary>
 - /// 循環(huán)合并多個文件(復(fù)制合并重復(fù)的文件)
 - /// </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>
 - /// 循環(huán)合并多個文件(復(fù)制合并重復(fù)的文件)
 - /// </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 循環(huán)合并多個文件(插入合并文件)
 - /// <summary>
 - /// 循環(huán)合并多個文件(插入合并文件)
 - /// </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>
 - /// 循環(huán)合并多個文件(插入合并文件)
 - /// </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
 - }
 - }
 
原文標(biāo)題:用C#編程合并多個WORD文檔
鏈接:http://www.cnblogs.com/madengwei/archive/2009/09/26/1574570.html
【編輯推薦】
責(zé)任編輯:彭凡 
                    來源:
                    博客園
 














 
 
 
 
 
 
 