繁体   English   中英

在C#中使用Microsoft.Office.Interop.Word合并和拆分Word文档

[英]Merge and Split Word Documents using Microsoft.Office.Interop.Word in C#

我需要将许多Word文件合并到一个文件中,将其发送给一个revisor并将其再次拆分为相同的分隔文件。 大约有200个小Word文档。

所以,当我进行合并时,我需要添加任何类型的标记作为参考,以便何时进行拆分。 我实际上是添加了一个带有原始文件名的标签,最终的Word文件将是这样的:

[c:\\ doc \\ file1.doc]

Lorem ipsum dolor坐下来,精致的adipistur elit。 Duis eget ipsum non est ultricies bibendum ac a sapien。 Etiam facilisis nunc ut arcu tincidunt,in fermentum ipsum pretium。 Phasellus non viverra orci。 Vestibulum varius vulputate leo quis fermentum。 Phasellus adipiscing diam ultricies odio accumsan,et dapibus velit dapibus。 Sed eleifend lectus et lacinia facilisis。 Pellentesque eleifend,purus in convallis faucibus,sapien purus fringilla arcu,volutpat dolor arcu ullamcorper purus。 在viverra magna neque中,eget imperdiet urna luctus at。 在hac habitasse platea dictumst。 Praesent aliquam arcu diam,quis fermentum lacus pellentesque ut。 Aliquam nulla eros,porttitor quis molestie eu,mollis vel lacus。 Sed nec aliquam libero。 Donec vel congue sapien,sed dignissim nisl。 Praesent dui nulla,fringilla iaculis lorem id,lacinia imperdiet odio。

[c:\\ doc \\ file1.doc]

[c:\\ doc \\ file2.doc]

Proin eu consectetur turpis,vel sagittis arcu。 Mauris iaculis lacus ut orci adipiscing,vitae eleifend ipsum egestas。 Suspendisse ullamcorper consequat laoreet。 Nullam interdum augue eget ante tempor porttitor。 Sed dignissim nulla libero,eu ultricies urna vestibulum quis。 Phasellus rhoncus leo sed leo gravida,nec ullamcorper neque tempor。 Sed sollicitudin,nisi ut lobortis sollicitudin,dui enim tristique leo,ac sodales leo elit quis odio。 Nulla dictum mattis mi in tempus。

[c:\\ doc \\ file2.doc]

我正在使用此代码合并文件,工作正常:

using System;
using System.Collections.Generic;
using Word = Microsoft.Office.Interop.Word;

namespace MyDocs
{
  public class MsWord
  {
    public static void Merge(List<string> filesToMerge, string outputFilename, string documentTemplate)
    {
      object defaultTemplate = documentTemplate;
      object missing = System.Type.Missing;
      object outputFile = outputFilename;

      // Create  a new Word application
      Word._Application wordApplication = new Word.Application();

      try
      {
        // Create a new file based on our template
        Word._Document wordDocument = wordApplication.Documents.Add(ref defaultTemplate, ref missing, ref missing, ref missing);

        // Make a Word selection object.
        Word.Selection selection = wordApplication.Selection;

        // Loop thru each of the Word documents
        foreach(var file in filesToMerge)
        {
            // create a tag with the file name
            string uid = String.Format("\n[ {0} ]\n", file);

            selection.TypeText(uid);
            selection.InsertFile(file, ref missing, ref missing, ref missing, ref missing);
            selection.TypeText(uid);
        }

        // Save the document to it's output file.
        wordDocument.SaveAs(ref outputFile, 
                            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);

        // Clean up!
        wordDocument = null;
      }
      catch (Exception ex)
      {
        //I didn't include a default error handler so i'm just throwing the error
        throw ex;
      }
      finally
      {
        // Finally, Close our Word application
        wordApplication.Quit(ref missing, ref missing, ref missing);
      }
    }
  }
}

现在我被困了,我现在不怎么分裂,我不理解Interop类,我需要阅读整个Word,找到标签并将其拆分成单独的文件。

我认为标签不是最好的方式,因为我不需要显示它。 我尝试使用这样的Section对象:

foreach(var file in filesToMerge)
{
    selection.Sections.Add();
    selection.InsertFile(Environment.CurrentDirectory + @"\" + file, ref missing, ref missing, ref missing, ref missing);
}

在阅读完这样的文件之后:

foreach (Word.Section section in wordDocument.Sections)
{
    // do save stuff                    
}

但现在只返回了2个部分:(

在我看来,最好的选择(而不是标签)将使用书签。 书签是:

  1. 容易添加!! Activedocument.bookmarks.add... (基于VBA语法)
  2. 很容易找到(按名称),
  3. for each loop迭代按bookmark name for each loop ,可以迭代它们,
  4. 它们具有range object property ,允许您在文档中找到书签所在的确切位置,
  5. 如果需要,它们可以是zero length range
  6. 如果名称以_开头,它们可能是不可见的(下划线标记,只有在以编程方式添加书签时才有效)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM