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#程序设计有一定的借鉴价值。

(0)

相关推荐

  • C# Word 类库的深入理解

    代码如下所示: 复制代码 代码如下: using System;using System.Collections.Generic;using System.Text;using Microsoft.Office.Interop.Word;using System.IO;using System.Web;using System.Data;using System.Reflection;using Microsoft.Win32;using System.Text.RegularExpressio

  • c#开发word批量转pdf源码分享

    微软Office Word本身已经提供了另存为PDF文档功能,对于少量文档,手工使用该方式进行Word转换为PDF尚可,一旦需要处理大量的文档,可能就显得有些捉襟见肘了.不过对于已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF了. 源码: 复制代码 代码如下: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.D

  • asp.net(c#)下读取word文档的方法小结

    第一种方法: 复制代码 代码如下: Response.ClearContent(); Response.ClearHeaders(); Response.ContentType = "Application/msword"; string s=Server.MapPath("C#语言参考.doc"); Response.WriteFile("C#语言参考.doc"); Response.Write(s); Response.Flush(); Re

  • C#采用OpenXml实现给word文档添加文字

    本文实例讲述了C#采用OpenXml实现给word文档添加文字的方法,分享给大家供大家参考.具体方法如下: 一般来说,使用OpenXml给word文档添加文字,每个模块都有自己对于的属性以及内容,要设置样式就先声明属性对象,将样式Append到属性里面,再将属性append到模块里面,那么模块里面的内容就具备该样式了.此方法默认是在文件后面追加内容 示例代码如下: using System; using System.Collections.Generic; using System.Linq;

  • C#获取Word文档中所有表格的实现代码分享

    今天从数据库生成了一份数据字典,但是没有备注,所以需要程序把表格都读出来.用到了下面的代码,亲测可用~~ object oFileName = @"F:\数据库.docx"; object oReadOnly = false ; object oMissing = System.Reflection.Missing.Value; Microsoft.Office.Interop.Word._Application oWord; Microsoft.Office.Interop.Word

  • C# WORD操作实现代码

    1.先通过程序生成报表样式的HTML页面,然后修改HTML页面的后缀名为DOC. 2.定制WORD文档的模板文件,在C#中操作WORD模板,生成新的WORD文档. 第一方案简单,只需要改动文件的扩展名就行了,但是也存在了一些问题,譬如生成的WORD文档样式的丢失.这样对于客户来说可能是一个无法通过的方案.第二方案比较复杂,需要调用OFFICE的WORD组件通过C#来操作WORD,进而生成WORD.此方法类似于我们在c#中的后台拼接数据.虽然麻烦,但是能够灵活定制,只不过是操作WORD对象而已.

  • C#采用OpenXml给word里面插入图片

    本文实例讲述了C#采用OpenXml给word里面插入图片的方法,分享给大家供大家参考.具体分析如下: 首先需要指出的是在MSDN官网有完整的OpenXML教程,虽然是全英文的不过还是很有帮助的. 注,原来摘抄代码里面没有模板,在copy过来发现插入word中的图片大小不一样,我们如何查找设置图片大小带代码的那一块,建议自己用在word里面插入一张图片,通过OpenXml Tools 反编译出C#代码,然后改变图片的大小,再次反编译. 使用byeond compare [http://www.s

  • C#操作word的方法示例

    本文实例讲述了C#操作word的方法.分享给大家供大家参考,具体如下: #region 读取word /// <summary> /// 读取word所有文字内容(不包含表格) /// </summary> /// <returns>word中的字符内容(纯文本)</returns> public string ReadAllFromWord() { Word.ApplicationClass app = null; Word.Document doc =

  • 使用C#实现在word中插入页眉页脚的方法

    针对Word的操作是很多程序都具备的功能,本文即以实例展示使用C#实现在word中插入页眉页脚的方法,供大家参考借鉴,具体方法如下: 一.插入页脚的方法: public void InsertFooter(string footer) { if (ActiveWindow.ActivePane.View.Type == WdViewType.wdNormalView || ActiveWindow.ActivePane.View.Type == WdViewType.wdOutlineView)

  • 使用c#在word文档中创建表格的方法详解

    复制代码 代码如下: public string CreateWordFile()        {            string message = "";            try            {                Object Nothing = System.Reflection.Missing.Value;                string name = "xiehuan.doc";               

  • 比较全的一个C#操作word文档示例

    最近两天研究了一下如何使用VS2008(C#语言)输出Word文档.以下是几点总结: 1.非常简单. 2.开发及运行环境要求.操作系统为:WindowsXP(安装.net framework2.0)/Vista/Win7:在操作系统必须安装Word2003完全安装版.这里必须要强调是Word2003完全安装版,因为软件开发及运行都需要一个com组件:Microsoft word 11.0 Object Library.如果不是Word2003完全安装版,可以下载这个com组件,并手动的安装这个c

  • C#实现通过模板自动创建Word文档的方法

    本文实例讲述了C#实现通过模板自动创建Word文档的方法,是非常实用的技巧.分享给大家供大家参考.具体实现方法如下: 引言:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决! 现通过具体的示例演示具体的步骤:   第一步,制作模板   1.新建一个文档,设置文档内容. 2.在相应位置插入书签:将鼠标定位到要插入书签的位置,点击"插入">"书签&quo

随机推荐