簡體   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