0

多くの Word ファイルを 1 つのファイルにマージし、それを改訂者に送信して、同じ分割ファイルに再度分割する必要があります。約 200 個の小さな Word ドキュメントがあります。

そのため、マージを行うときは、いつ分割するかを参照するために、任意の種類のマークを追加する必要があります。実際に元のファイル名のタグを追加しています。最終的な Word ファイルは次のようになります。

[ c:\doc\file1.doc ]

Lorem ipsum dolor sit amet, consectetur adipiscing elit. これは、私たちがサピエンスに二分しているということです。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、convallis faucibus のプルス、sapien purus fringilla arcu、volutpat dolor arcu ullamcorper purus。in viverra magna neque, eget imperdiet urna luctus at. ハク・ハビタス・プラテア・ディクタムストで。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. セド・ディグニシム・ヌラ・リベロ、ユー・ウルトリシーズ・ウルナ・ヴェスティビュラム・クイス。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 に答える