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

作者:shichen2014 时间:2022-10-02 08:32:39 

本文实例讲述了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#,word
0
投稿

猜你喜欢

  • Android编程简单实现九宫格示例

    2021-12-06 21:43:57
  • Spring框架构造注入type属性实例详解

    2021-10-04 19:45:19
  • Android使用shape使组件呈现出特殊效果的方法

    2022-06-28 03:42:27
  • Java单例模式实现静态内部类方法示例

    2021-08-03 00:36:51
  • Mybatis实现自定义类型转换器TypeHandler的方法

    2023-09-28 14:52:22
  • Intellij IDEA 2018配置Java运行环境的方法步骤

    2023-06-08 09:56:50
  • Java编程复用类代码详解

    2021-09-13 10:06:34
  • JSONObject toJSONString错误的解决

    2021-09-14 07:17:32
  • Android开发之使用150行代码实现滑动返回效果

    2023-03-20 11:08:50
  • Android Webview滑进出屏幕闪烁的解决方法

    2021-11-30 11:57:33
  • 一篇文章彻底搞清楚c#中的委托与事件

    2021-09-07 02:24:03
  • Unity实现图片轮播组件

    2023-03-19 05:12:33
  • 深入剖析构建JSON字符串的三种方式(推荐)

    2023-09-26 07:47:22
  • Android开发自学笔记(一):Hello,world!

    2023-09-12 14:48:50
  • Eclipse自定义启动画面和图标的方法介绍

    2022-05-14 09:27:13
  • Maven+Tomcat8 实现自动化部署的方法

    2023-01-03 06:44:20
  • Android微信自动抢红包插件优化和实现

    2021-12-08 10:25:28
  • Java实现添加文字水印&图片水印的方法详解

    2023-01-28 08:11:39
  • C++多重继承与虚继承分析

    2023-04-22 14:49:16
  • Android控件实现图片缩放功能

    2022-06-10 15:59:27
  • asp之家 软件编程 m.aspxhome.com