多くの 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つのセクションしか返されていません:(