OpenXML SDKを使用して、基本的なHTMLスニペットをWord文書に挿入したいと思います。
これをどのように行いますか:
- XMLを直接操作しますか?
- XSLTを使用していますか?
- AltChunkを使用していますか?
さらに、C#またはVBの例は大歓迎です:)
これは別の(比較的新しい)代替手段です
まあ、何が最善かはあなたのインプットに大きく依存するので、一般的なアドバイスをするのは難しい.
以下は、OpenXML SDK v2.0 と XPathDocument を使用して、(X)HTML ドキュメントの各段落の DOCX ドキュメントに段落を挿入する簡単な例です。
void ConvertHTML(string htmlFileName, string docFileName)
{
// Create a Wordprocessing document.
using (WordprocessingDocument package = WordprocessingDocument.Create(docFileName, WordprocessingDocumentType.Document))
{
// Add a new main document part.
package.AddMainDocumentPart();
// Create the Document DOM.
package.MainDocumentPart.Document = new Document(new Body());
Body body = package.MainDocumentPart.Document.Body;
XPathDocument htmlDoc = new XPathDocument(htmlFileName);
XPathNavigator navigator = htmlDoc.CreateNavigator();
XmlNamespaceManager mngr = new XmlNamespaceManager(navigator.NameTable);
mngr.AddNamespace("xhtml", "http://www.w3.org/1999/xhtml");
XPathNodeIterator ni = navigator.Select("//xhtml:p", mngr);
while (ni.MoveNext())
{
body.AppendChild<Paragraph>(new Paragraph(new Run(new Text(ni.Current.Value))));
}
// Save changes to the main document part.
package.MainDocumentPart.Document.Save();
}
}
この例では、入力が有効な XML である必要があります。そうでない場合、XPathDocument の作成時に例外が発生します。
これは、フォーマット、見出し、リストなどを考慮していない非常に基本的な例であることに注意してください。
あなたが実際に達成したいことはわかりません。OpenXML ドキュメントには、書式設定要素 (段落、太字テキストなど) 用の独自の html に似た (WordprocessingML) 表記法があります。基本的な書式設定を使用してドキュメントにテキストを追加する場合は、OpenXML 構文を使用して、挿入されたテキストをそれで書式設定することをお勧めします。
html スニペットをそのままドキュメントに含める必要がある場合は、OpenXML の「外部コンテンツ」機能を使用できます。外部コンテンツを使用すると、HTML ドキュメントをパッケージに含め、これを含めたい位置のドキュメントに参照 (altChunk) を作成できます。このソリューションの欠点は、すべてのツールが生成されたドキュメントをサポートする (または適切にサポートする) わけではないことです。そのため、HTML ソースを本当に変更できない場合を除き、このソリューションはお勧めしません。
コンテンツ (wordml) を openxml word doc に含める方法は独立した質問であり、その答えは、適用する変更の複雑さとドキュメントの大きさに大きく依存します。単純なドキュメントの場合、パッケージからドキュメント パーツを読み取り、そのストリームを取得して XmlDocument にロードするだけです。追加のコンテンツを XmlDocument に非常に簡単に挿入し、それをパッケージに保存し直すことができます。ドキュメントが大きい場合、または複数の場所で複雑な変更が必要な場合は、XSLT が適しています。