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