zoukankan      html  css  js  c++  java
  • 浅析C#合并多个WORD文档的具体实现方法

    http://www.chinacs.net/a/csharp/2010/0724/36.html

    今天因为客户需要,需要将多个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 

     

     

    /// <summary> 

     

    /// Word文档合并类 

     

    /// </summary> 

     

    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 

     

     

    作者: 火地晋
    出处: http://yelaiju.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    appium+python自动化测试之webview的处理。
    Mysql为什么要使用视图
    show status 查看各种状态
    MySQL show processlist
    Java爬虫系列(五)
    div p、div>p、div+p、div~p、div.a 、p,span的用法和区别
    Spring Boot 定时任务 -- @Scheduled
    设计模式
    12月15日总结
    成员变量和静态变量的区别
  • 原文地址:https://www.cnblogs.com/yelaiju/p/1812818.html
Copyright © 2011-2022 走看看