2010-09-21 43 views
5

我试图使用通过OpenXML SDK作为模板在.NET Web应用程序中为表单字母(本质上)读取的docx。我有一个我想要的格式的docx,用从xsd定义的XML Schema标记标记(无论它们被称为什么,这个帮助在这方面是非常无用的)。使用XML Schema和OpenXML SDK的WordML模板

我在Google上发现的唯一类似的东西似乎是用文本元素替换所需数据的CustomXmlBlock元素。这似乎......凌乱而脆弱。

我还有一些复杂的问题,即某些数据是分层的,包含节的元素,然后是该节的项。这似乎完全打破了上述方法。

那么,有人可以指出我正确的方向做这件事,或建议一个更好的方式来处理模板形式的信件?

回答

5

有许多的选择:

  1. 你在做什么,XSD架构映射。这是在Word 2003中引入的。当Word 2007推出时,它确实只在该版本的Word中处于活动状态,因此首选的新形式的表单变为#2。
  2. 内容控制。更多关于下面的内容。
  3. 试过并且真的是书签。如果你有兴趣,有一篇文章here

对于内容控件,这个概念很简单:在包装所需要的层次中的内容控制。也就是说,例如,具有日期选择器内容控制富文本内容控件然后对它们进行分组。然后在富文本内容控件中,放置一个组合框内容控件。 Eric White已经撰写了一篇关于此内容的优秀文章,内容来自Content Controls的内部检索Processing all Content Parts in an Open XML WordprocessingML Document。本文对链接Using Open XML WordprocessingML Documents as Data Sources中的内容控制进行了更全面的介绍。

更多链接上的内容控制:

  1. 布赖恩·琼斯网站上有很多伟大的文章。我相信这是他的第一个:The Easy Way to Assemble Multiple Word DocumentsCreate a rich Word document based on your own custom XML (without the need for XSLT)
  2. The Word Content Control Toolkit。可能是使用内容控件的最佳工具。
  3. Visual How To Content。这里有许多文章涉及内容控制。

要使用内容控制在话客户端手动工作,使从选项中的“开发”色带,然后插入内容控制和从在所述控件组的左侧部分设置其属性开发者织带。

+0

哇,这很好,我甚至不知道内容控制存在。我会接受并奖励赏金,虽然我有一个问题,更像是一个确认。看起来,内容控件没有内置支持任何类型的重复结构(表格,列表等)。我假设我将Rich Text Content Control作为占位符放入文档中,然后使用OpenXML sdk生成表或列表并将其设置为内容控件的内容? – 2010-09-25 06:46:26

+0

@Matt S:我已经添加了一些额外的链接,这些链接也可以帮助你开始。有许多方法可以通过内容控制来实现中继器 - 其中一个就是您提到的内容。另一种方法是使用Building Block。另一种方法是做一些与你所提到的相反的事情 - 把一张只有一个标题行的表格,然后在单元格中创建填充了CC的行。不妨看一下Word内容控制工具包 - 这样可以节省你与CC合作的时间,直到你变得更加熟悉。 – 2010-09-25 15:46:44

+0

@Matt S,这基本上是正确的。您需要一种方式来说明哪个内容控件是重复的占位符。 http://dev.plutext.org/svn/docx4j/trunk/docx4j/sample-docs/databinding/conventions.html提供了一种方法来做到这一点。 – JasonPlutext 2010-11-05 22:08:59