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

 更新时间:2014年09月19日 10:32:28   投稿:shichen2014  
这篇文章主要介绍了C#实现合并多个word文档的方法,是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#程序设计有一定的借鉴价值。

相关文章

  • C# HttpClient上传文件并附带其它参数方式

    C# HttpClient上传文件并附带其它参数方式

    这篇文章主要介绍了C# HttpClient上传文件并附带其它参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • C#中LinkedList<T>的存储结构详解

    C#中LinkedList<T>的存储结构详解

    这篇文章主要介绍了深度解析C#中LinkedList<T>的存储结构,本文将从链表的基础特性、C#中LinkedList的底层实现逻辑,.NET的不同版本对于Queue的不同实现方式的原因分析等几个视角进行简单的解读,需要的朋友可以参考下
    2023-12-12
  • 基于WPF实现绘制地铁路线图

    基于WPF实现绘制地铁路线图

    经常坐地铁,却不知道地铁多少条线路?哪个站下车?本文就来带大家利用WPF绘制深圳地铁路线图,从而带大家掌握WPF在图形绘制方面的一些知识,希望对大家有所帮助
    2023-06-06
  • 使用Nopcommerce为商城添加满XX减XX优惠券功能

    使用Nopcommerce为商城添加满XX减XX优惠券功能

    中秋国庆节眼看到跟前了,很多商城都借此机会搞促销活动,什么满200减80送优惠券等活动,基于后台程序是怎么实现的呢?下面脚本之家小编带领大家一起学习吧
    2015-09-09
  • 在C#中捕获内存不足异常

    在C#中捕获内存不足异常

    这篇文章主要介绍了在C#中捕获内存不足异常,下面文章内容围绕如何在C#中捕获内存不足异常的相关资料展开详细内容,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你有所帮助
    2021-12-12
  • 在C#使用字典存储事件示例及实现自定义事件访问器

    在C#使用字典存储事件示例及实现自定义事件访问器

    这篇文章主要介绍了在C#使用字典存储事件示例及实现自定义事件访问器的方法,是C#事件编程中的基础知识,需要的朋友可以参考下
    2016-02-02
  • C# 通过反射初探ORM框架的实现原理(详解)

    C# 通过反射初探ORM框架的实现原理(详解)

    下面小编就为大家分享一篇C# 通过反射初探ORM框架的实现原理详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • C# KeyUp事件中MessageBox的回车(Enter)键回调问题解决方案

    C# KeyUp事件中MessageBox的回车(Enter)键回调问题解决方案

    这篇文章主要介绍了C# KeyUp事件中MessageBox的回车(Enter)键回调问题解决方案,需要的朋友可以参考下
    2014-07-07
  • C#实现日期格式转换的公共方法类实例

    C#实现日期格式转换的公共方法类实例

    这篇文章主要介绍了C#实现日期格式转换的公共方法类,结合完整实例形式分析了C#针对各种常见日期格式的转换方法,涉及C#字符串、日期、时间相关操作技巧,需要的朋友可以参考下
    2017-01-01
  • C#实现Winform小数字键盘模拟器

    C#实现Winform小数字键盘模拟器

    本文主要介绍了C#实现Winform小数字键盘模拟器,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论