将一大块WordprocessingML添加到word文档中

时间:2012-08-08 15:47:05

标签: .net ms-office openxml office-2010

是否可以添加一个'' WordprocessingML到word文档(而不是整个文档)?我目前有一个docx用作我的模板,它包含一个ContentControl。我想通过AltChunk插入一部分WordprocessingML,但我插入的内容将呈现为文本,而不是像我希望的那样在文档中实现。

我目前使用的方法是:

var main = doc.MainDocumentPart;

// Create new AltChunk
string altChunkId = "altChunkId";
AlternativeFormatImportPart chunk = main.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId);

// Populate altChunk. stream = MemoryStream containing WordprocessingML
chunk.Feed(stream);

// Replace content control with altChunk info
AltChunk altChunk = new AltChunk();
altChunk.Id = altChunkId;

// Get SdtBlock to replace
SdtBlock block = ContentControlHelpers.GetSdtBlock(doc, "ContentControlId");
OpenXmlElement parent = block.Parent;
parent.InsertAfter(altChunk, block);
block.Remove();

我尝试插入的WordproccessingML示例是这样的(通过XML + XSLT生成):

<w:p>
  <w:pPr>
    <w:pStyle w:val="heading2" />
  </w:pPr>
  <w:r>
    <w:t>Product 1</w:t>
  </w:r>
</w:p>
<w:p>
  <w:pPr>
    <w:pStyle w:val="heading3" />
  </w:pPr>
  <w:r>
    <w:t>Europe</w:t>
  </w:r>
</w:p>
<w:p>
  <w:pPr>
    <w:pStyle w:val="heading4" />
  </w:pPr>
  <w:r>
    <w:t>France</w:t>
  </w:r>
</w:p>

我已尝试在其周围添加<w:document><w:body>元素以包装它,但无论我尝试文档只是将WordprocessingML呈现为文本,因为它显示以上,而不是将其嵌入文档中。

有关我可能出错的地方的任何建议吗?

1 个答案:

答案 0 :(得分:1)

看看DocumentBuilder - 开源示例和指导,展示如何完全按照您的意愿行事。

http://openxmldeveloper.org/wiki/w/wiki/documentbuilder.aspx

首先观看以下视频:

http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2011/08/17/new-screen-cast-short-and-sweet-intro-to-documentbuilder-2-0.aspx

-Eric