精华内容
下载资源
问答
  • C# 合并及拆分Word文档

    千次阅读 2016-08-03 09:48:53
    平时我们在处理多个word文档时,可能会想要将两个文档合并为一个,或者是将某个某个文档的一部分添加到另一个文档中,有的时候也会想要将文档拆分。在Word中,合并或拆分文档最简单的方式就是打开一个原文档的副本...

    C# 合并及拆分Word文档

    本文简要分析一下如何如何使用C#简单实现合并和拆分word文档。平时我们在处理多个word文档时,可能会想要将两个文档合并为一个,或者是将某个文档的一部分添加到另一个文档中,有的时候也会想要将文档拆分。在Word中,合并或拆分文档最简单的方式就是打开一个原文档的副本文件,复制我们需要的部分,删除不需要的部分,然后再保存文档。使用这种方法在文档比较多或者比较大时手动操作起来比较费时,以下是使用C#来合并一个Word文档的某一个section到另一个文档或者合并两个完整的Word文档到一个单独的文档以及如何根据section和page break来拆分一个Word文档的方法。


    第一部分:合并Word文档

    我新创建了两个简单的word文档,如下图:


                                                                                  文档1


                                                                                           文档2

    合并一个Word文档的某一个section到另一个文档

    //加载文档1和文档2
    Document doc1 = newDocument();
    doc1.LoadFromFile("SalesReport.docx", FileFormat.Docx);
    Document doc2 = newDocument();
    doc2.LoadFromFile("Stories.docx",FileFormat.Docx);
    //获取文档2的第一个section
    Section sec = doc2.Sections[0];
    //克隆该section并把它添加到文档1
    doc1.Sections.Add(sec.Clone());
    doc1.SaveToFile("Mergesection.docx",FileFormat.Docx);

    效果图:



    合并两个完整的Word文档到一个单独的文档

    //加载文档1
    Document document = new Document();
    document.LoadFromFile("SalesReport.docx", FileFormat.Docx);
    //将文档2的所有内容插入到文档1
    document.InsertTextFromFile("Stories.docx",FileFormat.Docx);
    //将结果另存为到另一个单独的文档
    document.SaveToFile("MergeFiles.docx",FileFormat.Docx);

    效果图:



    第二部分:拆分Word文档

    根据sectionbreak拆分Word文档

    //加载源文档
    Document document = new Document();
    document.LoadFromFile("MergeFiles.docx");
    //定义一个新的文档对象
    Document newWord;
    //遍历源文档的所有section,克隆每个section并将其添加至一个新的word文档,然后保存文档
    for (int i = 0; i <document.Sections.Count; i++)
    {
        newWord = new Document();
       newWord.Sections.Add(document.Sections[i].Clone());
        newWord.SaveToFile(String.Format(@"test\output_{0}.docx",i));
    }

    效果图:



    根据pagebreak拆分Word文档

    如下文档含有两个pagebreak分别在第一页和第二页的末尾:

     

    参考如下代码来根据page break拆分以上文档:

    //加载源文档
    Document original = new Document();
    original.LoadFromFile("NewZealand.docx");
    //创建一个新的文档并给它添加一个section
    Document newWord = new Document();
    Section section = newWord.AddSection();
     
    int index = 0;
    //遍历源文档的所有section,检测page break并根据page break拆分文档
    foreach (Section sec in original.Sections)
    {
        foreach (DocumentObjectobj in sec.Body.ChildObjects)
        {
            if (obj is Paragraph)
            {
                Paragraph para = obj asParagraph;
               section.Body.ChildObjects.Add(para.Clone());
                foreach (DocumentObjectparobj in para.ChildObjects)
                {
                   if (parobj isBreak && (parobj as Break).BreakType== BreakType.PageBreak)
                   {
                       int i =para.ChildObjects.IndexOf(parobj);
                       for (intj = i; j < para.ChildObjects.Count; j++)
                       {
                           section.Body.LastParagraph.ChildObjects.RemoveAt(i);
                       }
                       newWord.SaveToFile(String.Format("result/out-{0}.docx", index), FileFormat.Docx);
                       index++;
                       newWord = new Document();
                       section = newWord.AddSection();
                        section.Body.ChildObjects.Add(para.Clone());
                       while (i >= 0)
                       {
                           section.Paragraphs[0].ChildObjects.RemoveAt(i);
                            i--;
                       }
                       if(section.Paragraphs[0].ChildObjects.Count == 0)
                       {
                           section.Body.ChildObjects.RemoveAt(0);
                       }
                   }
                }
            }
            if (obj is Table)
            {
               section.Body.ChildObjects.Add(obj.Clone());
            }
        }
    }
    newWord.SaveToFile(String.Format("result/out-{0}.docx", index), FileFormat.Docx);

    效果图:



    完整代码:

    合并

    using Spire.Doc;
     
    namespace Merge_Word_Document
    {
        class Program
        {
            static void Main(string[] args)
            {
                //合并一个Word文档的某一个section到另一个文档
                /*Document doc1 = new Document();
                doc1.LoadFromFile("SalesReport.docx", FileFormat.Docx);
                Document doc2 = new Document();
               doc2.LoadFromFile("Stories.docx", FileFormat.Docx);
                Section sec = doc2.Sections[0];
                doc1.Sections.Add(sec.Clone());
               doc1.SaveToFile("Mergesection.docx", FileFormat.Docx);*/
     
                //合并两个完整的Word文档到一个单独的文档
                Document document = newDocument();
               document.LoadFromFile("SalesReport.docx", FileFormat.Docx);
               document.InsertTextFromFile("Stories.docx",FileFormat.Docx);
               document.SaveToFile("MergeFiles.docx",FileFormat.Docx);
            }
        }
    }

    拆分

    using System;
    using Spire.Doc;
    using Spire.Doc.Documents;
     
    namespace Split_Word_Document
    {
        class Program
        {
            static void Main(string[] args)
            {
                //根据section拆分
                /*Document document = new Document();
               document.LoadFromFile("Stories.doc");
                Document newWord;
                for (int i = 0; i <document.Sections.Count; i++)
                {
                    newWord = new Document();
                   newWord.Sections.Add(document.Sections[i].Clone());
                   newWord.SaveToFile(String.Format(@"test\out_{0}.docx", i));
                }*/
     
                //根据page break拆分
                Document original = newDocument();
                original.LoadFromFile("New Zealand.docx");
                Document newWord = newDocument();
                Section section = newWord.AddSection();
                int index = 0;
                foreach (Sectionsec in original.Sections)
                {
                   foreach (DocumentObjectobj in sec.Body.ChildObjects)
                   {
                       if (obj isParagraph)
                       {
                            Paragraph para = obj as Paragraph;
                           section.Body.ChildObjects.Add(para.Clone());
     
                            foreach (DocumentObject parobj in para.ChildObjects)
                            {
                                if (parobj is Break && (parobj asBreak).BreakType == BreakType.PageBreak)
                                {
                                    inti = para.ChildObjects.IndexOf(parobj);
                                    for (int j = i; j< para.ChildObjects.Count; j++)
                                    {
                                       section.Body.LastParagraph.ChildObjects.RemoveAt(i);
                                    }
                                   newWord.SaveToFile(String.Format("result/out-{0}.docx", index), FileFormat.Docx);
                                    index++;
                                    newWord = new Document();
                                    section =newWord.AddSection();
                                   section.Body.ChildObjects.Add(para.Clone());
                                    while (i >= 0)
                                    {
                                        section.Paragraphs[0].ChildObjects.RemoveAt(i);
                                        i--;
                                    }
                                    if (section.Paragraphs[0].ChildObjects.Count == 0)
                                    {
                                        section.Body.ChildObjects.RemoveAt(0);
                                    }
                                }
                            }
                       }
                       if (obj isTable)
                       {
                           section.Body.ChildObjects.Add(obj.Clone());
                       }
                   }
                }
               newWord.SaveToFile(String.Format("result/out-{0}.docx", index), FileFormat.Docx);
            }
        }
    }

    注意:这里我使用了一个免费的word API(http://freeword.codeplex.com)。

     

     

    展开全文
  • 今天因为客户需要,需要将多个WORD文档合并成为一个WORD文档。其中,对WORD文档的合并方式分种形式:  一是复制合并;  一是插入合并,即将多个文档按照先后顺序合并到另一个文档中.  代码如下: usingSystem; ...

    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://www.cnblogs.com/yelaiju/archive/2010/08/30/1812818.html,如需转载请自行联系原作者

    展开全文
  • C#编程合并个WORD文档

    千次阅读 2017-05-22 11:20:03
    之前遇到一个需求需要将多个表格导出word,最后采用的解决办法是批量导出再合并,然后在网上找的一篇合并个word文章:http://kb.cnblogs.com/page/49309 文中提供了合并:一是复制合并;一是插入合并,即将多个...

    之前遇到一个需求需要将多个表格导出word,最后采用的解决办法是批量导出再合并,然后在网上找的一篇合并多个word文章:http://kb.cnblogs.com/page/49309

    文中提供了两种合并:一是复制合并;一是插入合并,即将多个文档按照先后顺序合并到另一个文档中。

    调用方法:

            string templatePathAll="填充模板.doc";//一般是一个空文档

            string filesPath="需合并的文档目录";//一个文件夹目录,里面是需要合并的文档

           string Path="保存文档.doc";//输出文档路径

            WordDocumentMerger wordDocMerger = new WordDocumentMerger();
            wordDocMerger.InsertMerge(templatePathAll, filesPath, Path);

    代码如下:

     

    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
    {
        ///
        /// Word文档合并类
        ///
        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();
                objDocLast.SpellingChecked = false;//关闭Word的拼写检查
           objDocLast.ShowSpellingErrors = false;//关闭Word的拼写错误提示 
            }
            #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 循环合并多个文件(复制合并重复的文件)
            ///
            /// 循环合并多个文件(复制合并重复的文件)
            ///
            /// 模板文件
            /// 需要合并的文件
            /// 合并后的输出文件
            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;
                }
            }
            ///
            /// 循环合并多个文件(复制合并重复的文件)
            ///
            /// 模板文件
            /// 需要合并的文件
            /// 合并后的输出文件
            public void CopyMerge(string tempDoc, string strCopyFolder, string outDoc)
            {
                string[] arrFiles = Directory.GetFiles(strCopyFolder);
                CopyMerge(tempDoc, arrFiles, outDoc);
            }
            #endregion
    
            #region 循环合并多个文件(插入合并文件)
            ///
            /// 循环合并多个文件(插入合并文件)
            ///
            /// 模板文件
            /// 需要合并的文件
            /// 合并后的输出文件
            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;
                }
            }
            ///
            /// 循环合并多个文件(插入合并文件)
            ///
            /// 模板文件
            /// 需要合并的文件
            /// 合并后的输出文件
            public void InsertMerge(string tempDoc, string strCopyFolder, string outDoc)
            {
                string[] arrFiles = Directory.GetFiles(strCopyFolder);
                InsertMerge(tempDoc, arrFiles, outDoc);
            }
            #endregion
        }
    }

     

     

     

     

     

    展开全文
  • 小技巧:用C#编程合并个WORD文档

    千次阅读 2010-11-04 17:00:00
    因为工作的关系,要将多个WORD文档合并成为一个WORD文档,所以小试了一把。其中,对WORD文档的合并方式分种形式:一是复制合并;一是插入合并,即将多个文档按照先后顺序合并到另一个文档中。代码如下:using ...

    因为工作的关系,要将多个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
        }
    }

    展开全文
  • 今天因为客户需要,需要将多个WORD文档合并成为一个WORD文档。其中,对WORD文档的合并方式分种形式:一是复制合并;一是插入合并,即将多个文档按照先后顺序合并到另一个文档中.代码如下: using System;using ...
  • C#把多个Word文档合并成一个的方法

    千次阅读 2012-09-10 17:45:37
    由于客户需要,需要将多个WORD文档合并成为一个WORD文档。其中,对WORD文档的合并方式分种形式:  一是复制合并;  一是插入合并,即将多个文档按照先后顺序合并到另一个文档中.  代码如下:  using ...
  • 今天因为客户需要,需要将多个WORD文档合并成为一个WORD文档。其中,对WORD文档的合并方式分种形式:一是复制合并;一是插入合并,即将多个文档按照先后顺序合并到另一个文档中.代码如下: using System;using ...
  • C#模板导出Word

    千次阅读 2019-05-06 18:16:39
    选择插入 》选择文档部件》选择域》选择左侧域名的邮件合并 先using Aspose.Words; using Aspose.Words.Saving;...即引入Aspose.Cells.dll 和 Aspose.Words.dll 两个程序集 try { int AnalyzeType = this.dd...
  • C#操作Word表格

    千次阅读 2013-09-06 09:07:39
    向表格中添加行,有种操作形式:一种是在WORD模板中已经存在了一表格。一种是我们在程序中直接添加一表格对象。 第一种情况下,需要注意:在WORD模板中要操作的表格中,不能有纵向合并的单元格,不然程序无法...
  • 该API还支持两个或多个PDF的合并/串联。 Api2Pdf是wkhtmltopdf , Headless Chrome和LibreOffice等流行库的包装。 添加依赖 裸体 运行nuget命令以安装客户端Install-Package Api2Pdf 资源资源 该API支持的资源: ...
  • C#.net_经典编程例子400

    热门讨论 2013-05-17 09:25:30
    第1章 窗体与界面设计 1 1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 5 实例005 可以拉伸...
  • 实例108 计算两个矩形矩阵的乘积 129 第5章 面向对象编程技术 131 5.1 属性和方法 132 实例109 使用属性存储用户编号和姓名 132 实例110 通过定义方法求一个数的平方 133 实例111 使用重载方法实现不同类型数据的...
  •  实例108 计算两个矩形矩阵的乘积 129  第5章 面向对象编程技术 131 5.1 属性和方法 132  实例109 使用属性存储用户编号和姓名 132  实例110 通过定义方法求一个数的平方 133  实例111 使用重载方法实现...
  • C#全能速查宝典

    热门讨论 2014-04-26 16:16:27
    1.4.4 CompareTo方法——比较两个字符串对象 47 1.4.5 DATEADD函数——在指定日期上加一段时间 48 1.4.6 DateDiff方法——获取日期时间的间隔数 48 1.4.7 DateTime结构——表示时间上的一刻 50 1.4.8 DAY函数——...
  • C#开发典型模块大全

    2014-03-12 18:11:22
    20.2.3 如何获取两个日期的月份差 515 20.2.4 获取两个日期的相差天数 516 20.2.5 载取字符串中的指定字符 516 20.3 设计过程 517 20.3.1 获取加密字符串的信息 517 20.3.2 对生成后的数据进行加密 520 ...
  • 实例108 计算两个矩形矩阵的乘积 第5章 面向对象编程技术 5.1 属性和方法 实例109 使用属性存储用户编号和姓名 实例110 通过定义方法求一个数的平方 实例111 使用重载方法实现不同类型数据的计算 5.2 结构与...

空空如也

空空如也

1 2 3
收藏数 53
精华内容 21
热门标签
关键字:

c#合并两个word文档

c# 订阅