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

2019-10-18 06:29发布

我需要很多的Word文件合并成一个单一的文件,发送一个反向器,并再次分裂它同分隔的文件。 有大约200家Word文档。

所以,当我做了合并,我需要添加任何类型的标记以供参考时,我会分裂它。 实际上,我将与原来的文件名的标签,最后的Word文件将是这样的:

[C:\ DOC \的File1.doc]

Lorem存有悲坐阿梅德,consectetur adipiscing ELIT。 它是不是一个SAPIEN ultricies必比登DUIS eget存有。 即使是现在很容易在热身这个价格开发商弧。 Phasellus灵猫奥奇。 Vulputate狮子任何生产各种发酵。 南本科直径ultricies恨为本,户外蛋白质和蛋白质。 但是扣除毕业裙子和抗氧化剂。 营养日本,巴基斯坦在山谷颌骨SAPIEN辣椒生态电弧,电弧ullamcorper周末智能生产。 在动画片或大,但需要哀悼融资锅。 再融资。 目前弓的教科书,如竹应力营养。 最新的零花生,任何航空公司雇员足球,软或组织。 但事与愿违的免费广告。 规划SAPIEN直到它,但足球运动员。 目前酒后驾车法无,ID燕雀iaculis LOREM,lacinia imperdiet仇恨。

[C:\ DOC \的File1.doc]

[C:\ DOC \ file2.doc]

微波增强丑陋的足球,蝴蝶结或酒精。 Mauris iaculis拉克丝UT桑达adipiscing lobortis,eleifend存有egestas。 北极熊摄影等。 接力宣传有时需要航空公司之前的时间。 然而,天下没有免费的足球,橄榄球ultricies一锅制造。 但怀孕Phasellus rhoncus利奥狮子,NEC ullamcorper预期值,也tempor。 桑达sollicitudin,但他可能sollicitudin lobortis,enim tristique DUI狮子,狮子,投资者,谁可以恨的成员。 目前已经有很多我的时间。

[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);
      }
    }
  }
}

现在我stucked,不知现在如何分割,我不理解互操作类,我需要阅读整篇Word,找到标签和它分割成分隔的文件。

我认为,标签是不是最好的方式,因为我并不需要表现出来。 我尝试使用部分对象是这样的:

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款返回:(

Answer 1:

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

  1. 容易添加! 像Activedocument.bookmarks.add... (基于VBA语法)
  2. 易(按名称)来查找,
  3. 他们可以通过迭代for each loop ,其中重复的推移bookmark name
  4. 他们有range object property ,让你找到你的文档中准确点书签的位置,
  5. 它们可以是zero length range ,如果需要
  6. 如果名称开头他们可能是看不见的_ (下划线标记,而只有当书签被以编程方式添加的作品)


文章来源: Merge and Split Word Documents using Microsoft.Office.Interop.Word in C#