DocMerger.cs
上传用户:tiancihang
上传日期:2014-03-12
资源大小:21387k
文件大小:10k
源码类别:

.net编程

开发平台:

C#

  1. using System;
  2. using System.Reflection;
  3. using System.IO;
  4. using System.Diagnostics;
  5. using Word;
  6. using Microsoft.Office.Core;
  7. namespace DocMergerComponent
  8. {
  9.   /// <summary>
  10.   /// Simple class to get a merged document based on a baseline document
  11.   /// and a set of copies
  12.   /// </summary>
  13.     public class DocMerger
  14.   {
  15.     /// <summary>
  16.     /// Merge a document with a set of copies
  17.     /// </summary>
  18.     /// <param name="strOrgDoc">
  19.     /// Original file name
  20.     /// </param>
  21.     /// <param name="arrCopies">
  22.     /// File names of the modified files
  23.     /// </param>
  24.     /// <param name="strOutDoc">
  25.     /// The result filename
  26.     /// </param>
  27.     public void Merge(string strOrgDoc, string[] arrCopies, string strOutDoc)
  28.     {
  29.       ApplicationClass objApp = null;
  30.       //boxing of default values for COM interop purposes
  31.       object objMissing = Missing.Value;
  32.       object objFalse = false;
  33.       object objTarget = WdMergeTarget.wdMergeTargetSelected;
  34.       object objUseFormatFrom = WdUseFormattingFrom.wdFormattingFromSelected;
  35.       try
  36.       {
  37.         objApp = new ApplicationClass();
  38.         object objOrgDoc = strOrgDoc;
  39.         
  40.         Document objDocLast = null;
  41.         Document objDocBeforeLast = null;
  42.         objDocLast = objApp.Documents.Open(
  43.           ref objOrgDoc,    //FileName
  44.           ref objMissing,   //ConfirmVersions
  45.           ref objMissing,   //ReadOnly
  46.           ref objMissing,   //AddToRecentFiles
  47.           ref objMissing,   //PasswordDocument
  48.           ref objMissing,   //PasswordTemplate
  49.           ref objMissing,   //Revert
  50.           ref objMissing,   //WritePasswordDocument
  51.           ref objMissing,   //WritePasswordTemplate
  52.           ref objMissing,   //Format
  53.           ref objMissing,   //Enconding
  54.           ref objMissing,   //Visible
  55.           ref objMissing,   //OpenAndRepair
  56.           ref objMissing,   //DocumentDirection
  57.           ref objMissing,   //NoEncodingDialog
  58.           ref objMissing    //XMLTransform
  59.           );
  60.         foreach(string strCopy in arrCopies)
  61.         {
  62.           Debug.WriteLine("Merging file " + strCopy);
  63.           objDocLast.Merge(
  64.             strCopy,                //FileName    
  65.             ref objTarget,          //MergeTarget
  66.             ref objMissing,         //DetectFormatChanges
  67.             ref objUseFormatFrom,   //UseFormattingFrom
  68.             ref objMissing          //AddToRecentFiles
  69.             ); 
  70.           objDocBeforeLast = objDocLast;
  71.           objDocLast = objApp.ActiveDocument;
  72.           Debug.WriteLine("The active document is " + objDocLast.Name);
  73.           if (objDocBeforeLast != null)
  74.           {
  75.             Debug.WriteLine("Closing " + objDocBeforeLast.Name);
  76.             objDocBeforeLast.Close(
  77.               ref objFalse,     //SaveChanges
  78.               ref objMissing,   //OriginalFormat
  79.               ref objMissing    //RouteDocument
  80.               );
  81.           }
  82.             
  83.           
  84.         }
  85.         object objOutDoc = strOutDoc;
  86.       
  87.         objDocLast.SaveAs(    
  88.           ref objOutDoc,      //FileName
  89.           ref objMissing,     //FileFormat
  90.           ref objMissing,     //LockComments
  91.           ref objMissing,     //PassWord     
  92.           ref objMissing,     //AddToRecentFiles
  93.           ref objMissing,     //WritePassword
  94.           ref objMissing,     //ReadOnlyRecommended
  95.           ref objMissing,     //EmbedTrueTypeFonts
  96.           ref objMissing,     //SaveNativePictureFormat
  97.           ref objMissing,     //SaveFormsData
  98.           ref objMissing,     //SaveAsAOCELetter,
  99.           ref objMissing,     //Encoding
  100.           ref objMissing,     //InsertLineBreaks
  101.           ref objMissing,     //AllowSubstitutions
  102.           ref objMissing,     //LineEnding
  103.           ref objMissing      //AddBiDiMarks
  104.           );
  105.         foreach(Document objDocument in objApp.Documents)
  106.         {
  107.           objDocument.Close(
  108.             ref objFalse,     //SaveChanges
  109.             ref objMissing,   //OriginalFormat
  110.             ref objMissing    //RouteDocument
  111.             );
  112.         }
  113.         
  114.       }
  115.       finally
  116.       {
  117.         objApp.Quit(          
  118.           ref objMissing,     //SaveChanges
  119.           ref objMissing,     //OriginalFormat
  120.           ref objMissing      //RoutDocument
  121.           );
  122.         objApp = null;
  123.       }
  124.     }
  125.     /// <summary>
  126.     /// Merge a document with a set of copies
  127.     /// </summary>
  128.     /// <param name="strOrgDoc">
  129.     /// Original file name
  130.     /// </param>
  131.     /// <param name="strCopyFolder">
  132.     /// Folder in which the copies are located
  133.     /// </param>
  134.     /// <param name="strOutDoc">
  135.     /// The result filename
  136.     /// </param>
  137.     public void Merge(string strOrgDoc, string strCopyFolder, string strOutDoc)
  138.     {
  139.       string[] arrFiles = Directory.GetFiles(strCopyFolder);
  140.       Merge(strOrgDoc, arrFiles, strOutDoc);
  141.     }
  142.   }
  143.     /// <summary>
  144.     ///  Word文档合并
  145.     /// </summary>
  146.             /*==============================================================================================
  147.            * 
  148.            *                                  stephen·周整理程序
  149.              * 
  150.              *=============================================================================================*/
  151.     public class MyDocMerger
  152.     {
  153.         private ApplicationClass oWordApplicatoin = null;
  154.         private Document oDoc;
  155.         /*==============================================================================================
  156.          * 
  157.          *                                     合并单个文档
  158.          * 
  159.          *=============================================================================================*/
  160.         public void Merge(string strOrgDoc, string strCopyDoc, string strOutDoc)
  161.         {
  162.             //boxing of default values for COM interop purposes
  163.             object objMissing = Missing.Value;
  164.             object objFalse = false;
  165.             try
  166.             {
  167.                 object filename = strOrgDoc;
  168.                 object readOnly = false;
  169.                 object isVisible = true;
  170.                 object missing = System.Reflection.Missing.Value;
  171.                 oWordApplicatoin = new ApplicationClass();
  172.                 oDoc = oWordApplicatoin.Documents.Open(ref filename, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
  173.                     ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing, ref missing);
  174.                 oDoc.Activate();
  175.                 object confirmConversion = false;
  176.                 object link = false;
  177.                 object attachment = false;
  178.                 oWordApplicatoin.Selection.InsertFile(strCopyDoc, ref missing, ref confirmConversion, ref link, ref attachment);
  179.                 object filename_save = strOutDoc;
  180.                 oDoc.SaveAs(ref filename_save, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
  181.                 foreach (Document objDocument in oWordApplicatoin.Documents)
  182.                 {
  183.                     objDocument.Close(ref objFalse, ref objMissing, ref objMissing);
  184.                 }
  185.             }
  186.             finally
  187.             {
  188.                 oWordApplicatoin.Quit(ref objMissing, ref objMissing, ref objMissing); 
  189.             }
  190.         }
  191.        /*==============================================================================================
  192.         * 
  193.         *                                     合并多个文档
  194.         * 
  195.         *=============================================================================================*/
  196.         public void MergeDocArray(string strOrgDoc, string[] strCopiesDoc, string strOutDoc)
  197.         {
  198.             //boxing of default values for COM interop purposes
  199.             object objMissing = Missing.Value;
  200.             object objFalse = false;
  201.             try
  202.             {
  203.                 object filename = strOrgDoc;
  204.                 object readOnly = false;
  205.                 object isVisible = true;
  206.                 object missing = System.Reflection.Missing.Value;
  207.                 oWordApplicatoin = new ApplicationClass();
  208.                 oDoc = oWordApplicatoin.Documents.Open(ref filename, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
  209.                     ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing, ref missing);
  210.                 oDoc.Activate();
  211.                 foreach (string strCopy in strCopiesDoc)
  212.                 {
  213.                     object confirmConversion = false;
  214.                     object link = false;
  215.                     object attachment = false;
  216.                     oWordApplicatoin.Selection.InsertFile(strCopy, ref missing, ref confirmConversion, ref link, ref attachment);
  217.                 }
  218.                 object filename_save = strOutDoc;
  219.                 oDoc.SaveAs(ref filename_save, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
  220.                 foreach (Document objDocument in oWordApplicatoin.Documents)
  221.                 {
  222.                     objDocument.Close(ref objFalse, ref objMissing, ref objMissing);
  223.                 }
  224.             }
  225.             finally
  226.             {
  227.                 oWordApplicatoin.Quit(ref objMissing, ref objMissing, ref objMissing); 
  228.             }
  229.         }
  230.     }
  231. }