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

所属分类: 软件编程 / C#教程 阅读数: 80
收藏 0 赞 0 分享

本文实例讲述了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#抽象类与抽象方法详解

这篇文章主要为大家详细介绍了C#抽象类与抽象方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#代码实现扑克牌排序的几种方式

今天小编就为大家分享一篇关于C#代码实现扑克牌排序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#泛型概念的简介与泛型的使用

今天小编就为大家分享一篇关于C#泛型概念的简介与泛型的使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C# 7.0 使用下划线忽略使用的变量的原因分析

这篇文章主要介绍了C# 7.0 使用下划线忽略使用的变量的原因浅析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C# 中使用正则表达式匹配字符的含义

正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

C# Dictionary和SortedDictionary的简介

今天小编就为大家分享一篇关于C# Dictionary和SortedDictionary的简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#中SQL Command的基本用法

今天小编就为大家分享一篇关于C#中SQL Command的基本用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataReader访问数据的优点和实例

今天小编就为大家分享一篇关于C#使用SQL DataReader访问数据的优点和实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL Dataset数据集代码实例

今天小编就为大家分享一篇关于的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataAdapter数据适配代码实例

今天小编就为大家分享一篇关于C#使用SQL DataAdapter数据适配代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享
查看更多