0

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

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

[ c:\doc\file1.doc ]

Lorem ipsum dolor sit amet, consectetur adipiscing elit。Duis eget ipsum non est ultricies bibendum ac a sapien。Etiam facilisis nunc ut arcu tincidunt,在发酵剂 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, a volutpat dolor arcu ullamcorper purus。在 viverra magna neque,eget imperdiet urna luctus 在。在 hac habitasse platea dictumst 中。Praesent aliquam arcu diam, quis balloonum lacus pellentesque ut。Aliquam nulla eros,porttitor quis molestie eu,mollis vel lacus。sed nec aliquam 自由。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 个部分 :(

4

1 回答 1

2

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

  1. 容易添加!!类似的东西Activedocument.bookmarks.add...(基于VBA语法)
  2. 很容易找到(按名称),
  3. 它们可以通过迭代经过的for each loop地方进行迭代bookmark name
  4. 他们有range object property它可以让您在文档中找到书签所在的确切点,
  5. zero length range如果需要,他们可能会
  6. 如果名称以_(下划线标记,仅在以编程方式添加书签时有效),它们可能是不可见的
于 2013-06-15T06:46:22.680 回答