11

古いMSWord-97ベースのシステムでは、COMを使用して.docファイルを操作し、OLEオブジェクトを埋め込むため、埋め込まれたドキュメントは(アイコンとしてではなく)親に表示されます。

サーバー上に.docxファイルを生成するWordが必要なため、これをOpenXMLSDKを使用するシステムに置き換えます。ただし、RTFファイルの内容を生成されたDOCXに埋め込む必要があります...具体的には、ブックマークをファイルの内容に置き換えます。

オンラインでいくつかの例を見つけましたが、それらはすべて異なります。Wordで簡単な例を作成してXMLを表示すると、埋め込みオブジェクトの視覚的表現を配置/表示するための要素がたくさんありますが、埋め込み自体はそれほど恐ろしいものではありません。これを行う最も簡単な方法は何ですか?

4

2 に答える 2

12

外部コンテンツのアンカーを使用して、RTFドキュメントのコンテンツをOpenXMLDOCXファイルに埋め込むことができます。AltChunkAltChunkw:altChunk要素は、ドキュメントなどの外部コンテンツを挿入するためのOpenXMLWordprocessingMLドキュメント内の場所を指定しますRTF。以下のコードは、AltChunkクラスをクラスと組み合わせて使用​​して、最後の段落の後に ドキュメントAlternativeFormatImportPartのコンテンツをファイルに埋め込みます。RTFDOCX

using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(@"your_docx_file.docx", true))
{
  string altChunkId = "AltChunkId5";

  MainDocumentPart mainDocPart = wordDocument.MainDocumentPart;
  AlternativeFormatImportPart chunk = mainDocPart.AddAlternativeFormatImportPart(
        AlternativeFormatImportPartType.Rtf, altChunkId);      

  // Read RTF document content.
  string rtfDocumentContent = File.ReadAllText("your_rtf_document.rtf", Encoding.ASCII);

  using (MemoryStream ms = new MemoryStream(Encoding.ASCII.GetBytes(rtfDocumentContent)))
  {
    chunk.FeedData(ms);
  }

  AltChunk altChunk = new AltChunk();
  altChunk.Id = altChunkId;

  // Embed AltChunk after the last paragraph.
  mainDocPart.Document.Body.InsertAfter(
    altChunk, mainDocPart.Document.Body.Elements<Paragraph>().Last());

  mainDocPart.Document.Save();
}

RTFUnicode文字列をファイルに埋め込む場合は、Unicode文字DOCXをエスケープする必要があります。例については、次のstackoverflowの回答を参照してください。

「ファイルが壊れています」というエラーが発生した場合は、自分Dispose()または。ドキュメントをClose()しないと、の関連性はDocument.xml.relsファイルに保存されません。Close()WordprocessingDocumentw:altchunk

于 2013-12-01T13:22:22.637 に答える
0

この仲間は、OpenXml2.0を使用して任意のファイルタイプをMicrosoftWordに埋め込む方法について、彼自身の質問と回答でそれを理解したようです。

于 2010-07-30T07:14:49.683 に答える