C# source code: Merge Word documents into one file

We have one project that required us to merge serval microsoft word documents into one single file.  To achive this, I made a class library, which is able to merge multiple word documents into one follow some sequence. The source code is:

    public class DocMerger
    {
        
private ApplicationClass objApp = null;
        
private Document objDocLast = null;
        
private Document objDocBeforeLast = null;

        
/// <summary>
        
/// Initializes a new instance of the <see cref="DocMerger"/> class.
        
/// </summary>
        public DocMerger()
        {
            objApp
= new ApplicationClass();
        }

        
/// <summary>
        
/// Opens the specified word document.
        
/// </summary>
        
/// <param name="wordDocument">The word document.</param>
        private void Open(string wordDocument)
        {
            
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();
        }


        
/// <summary>
        
/// Saves as another word document.
        
/// </summary>
        
/// <param name="outWordDocument">The out word document.</param>
        private void SaveAs(string outWordDocument)
        {
            
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
              );
        }

        
/// <summary>
        
/// Loop the list of word document files and merge it.
        
/// </summary>
        
/// <param name="tempDoc">The temp doc.</param>
        
/// <param name="arrCopies">The file list.</param>
        
/// <param name="outDoc">The out doc.</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 fileName in arrCopies)
                {
                    objDocLast.Merge(
                      fileName,                
//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>
        
/// Copies the merge.
        
/// </summary>
        
/// <param name="tempDoc">The temp doc.</param>
        
/// <param name="sourceFolder">The source folder.</param>
        
/// <param name="outputDocument">The output document.</param>
        public void CopyMerge(string tempDoc, string sourceFolder, string outputDocument)
        {
            
string[] arrFiles = Directory.GetFiles(sourceFolder);
            CopyMerge(tempDoc, arrFiles, outputDocument);
        }


        
/// <summary>
        
/// Inserts the merge.
        
/// </summary>
        
/// <param name="tempDoc">The temp doc.</param>
        
/// <param name="fileList">The file list.</param>
        
/// <param name="outDoc">The out doc.</param>
        public void InsertMerge(string tempDoc, string[] fileList, 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 fileList)
                {
                    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>
        
/// Inserts the merge.
        
/// </summary>
        
/// <param name="tempDoc">The temp doc.</param>
        
/// <param name="strCopyFolder">The STR copy folder.</param>
        
/// <param name="outDoc">The out doc.</param>
        public void InsertMerge(string tempDoc, string strCopyFolder, string outDoc)
        {
            
string[] arrFiles = Directory.GetFiles(strCopyFolder);
            InsertMerge(tempDoc, arrFiles, outDoc);
        }

    }

You can download it by click Here.

Post Rating

Comments
Only registered users may post comments.
Subscribe
Rss Feed Email Follow Us on Twitter
Search