• 艾伟_转载:用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
    {
    ///
    /// Word文档合并类
    ///
    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 循环合并多个文件(复制合并重复的文件)
    ///
    /// 循环合并多个文件(复制合并重复的文件)
    ///
    /// 模板文件
    /// 需要合并的文件
    /// 合并后的输出文件
    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;
    }
    }
    ///
    /// 循环合并多个文件(复制合并重复的文件)
    ///
    /// 模板文件
    /// 需要合并的文件
    /// 合并后的输出文件
    public void CopyMerge(string tempDoc, string strCopyFolder, string outDoc)
    {
    string[] arrFiles = Directory.GetFiles(strCopyFolder);
    CopyMerge(tempDoc, arrFiles, outDoc);
    }
    #endregion

    #region 循环合并多个文件(插入合并文件)
    ///
    /// 循环合并多个文件(插入合并文件)
    ///
    /// 模板文件
    /// 需要合并的文件
    /// 合并后的输出文件
    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;
    }
    }
    ///
    /// 循环合并多个文件(插入合并文件)
    ///
    /// 模板文件
    /// 需要合并的文件
    /// 合并后的输出文件
    public void InsertMerge(string tempDoc, string strCopyFolder, string outDoc)
    {
    string[] arrFiles = Directory.GetFiles(strCopyFolder);
    InsertMerge(tempDoc, arrFiles, outDoc);
    }
    #endregion
    }
    }

  • 相关阅读:
    鲜牛奶与纯牛奶的区别 All In One
    Rough Notation Animation All In One
    java基础编程String及相关
    JDBC1
    java基础数据类型
    java基础编程
    JDBC3
    MYSQL1
    JDBC2
    JSP和Servlet的相同点和不同点,他们之间的联系
  • 原文地址:https://www.cnblogs.com/waw/p/2157123.html
Copyright © 2020-2023  润新知