ユーザー入力 (リッチ テキスト エディターを含む) から Word 文書にコンテンツを挿入する必要があるアプリケーションを開発しています。この目的のために、DocX ライブラリ ( http://docx.codeplex.com/ ) を使用します。ライブラリは、特定のタスクを実行するための非常に優れた方法を提供し、コンテンツを空のドキュメントに挿入するだけでよい場合に限り、うまく機能します。
ただし、挿入する必要があるドキュメントは、既にコンテンツが含まれているテンプレートです。私が必要としているのは、ドキュメント内のこのコンテンツの後にユーザー入力を挿入できるようにすることです。このような:
ここにいくつかのデフォルトのコンテンツがあります。
[これは私が欲しい私のコンテンツです]
ここにいくつかの他のデフォルトのコンテンツがあります。
DocX には、段落とリストをドキュメントに挿入するためのメソッドがあります。
using(var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(PathToTestFile))
{
var doc = DocX.Load(stream); //will have two paragraphs
var p = doc.InsertParagraph(); //adds a new, empty paragraph to the end of the document
var list = doc.AddList(listType: ListItemType.Numbered); //adds a list
doc.AddListItem(list, "Test1", listType: ListItemType.Numbered); //adds a listitem to the list
doc.InsertList(list); //adds a list to the end of the document
}
段落には、表や他の段落などの特定のオブジェクトをそれ自体の前または後に挿入するメソッドもあります。
//given a Paragraph p and another Paragraph newP:
p.InsertParagraphAfterSelf(newP);
リストには同じメソッドがありますが、他のリストで同じことを行うオプションはありません (つまり、上記の例と同じことをリストで行うことはできません)。この目的のために、ドキュメント内の段落またはリストのインデックスが必要です。これにより、インデックスをパラメーターとして受け入れる挿入メソッドを使用できるようになります。
DocX クラスにはこれがあります (DocX ソース コードから抽出: http://docx.codeplex.com/SourceControl/latest#DocX/DocX.cs ):
// A lookup for the Paragraphs in this document.
internal Dictionary<int, Paragraph> paragraphLookup = new Dictionary<int, Paragraph>();
このディクショナリは内部用です。つまり、アクセスできません。私の人生では、インデックスを見つける他の方法を見つけることはできませんが、このインデックスを必要とするメソッドがあるため、それは方法でなければなりません。誰かが同じ問題に遭遇しましたか? 解決策は非常に高く評価されます。