Ste*_*e B 6 ms-word openxml openxml-sdk
我正在使用OpenXml SDK生成word 2013文件.我正在服务器上运行(服务器解决方案的一部分),因此自动化不是一种选择.
基本上我有一个从后端系统输出的xml文件.这是一个非常简单的例子:
<my:Data
xmlns:my="https://schemas.mycorp.com">
<my:Customer>
<my:Details>
<my:Name>Customer Template</my:Name>
</my:Details>
<my:Orders>
<my:Count>2</my:Count>
<my:OrderList>
<my:Order>
<my:Id>1</my:Id>
<my:Date>19/04/2017 10:16:04</my:Date>
</my:Order>
<my:Order>
<my:Id>2</my:Id>
<my:Date>20/04/2017 10:16:04</my:Date>
</my:Order>
</my:OrderList>
</my:Orders>
</my:Customer>
</my:Data>
Run Code Online (Sandbox Code Playgroud)
然后我使用Word的Xml Mapping窗格将此数据映射到内容控件:
我只是复制word文件,并在生成新文件时编写新的Xml数据.
这是按预期工作的.当我更新xml部分时,它反映了我后端的数据.
想到,有一个案例不起作用.如果客户没有订单,则模板内容将保留在文档中.xml数据是:
<my:Data
xmlns:my="https://schemas.mycorp.com">
<my:Customer>
<my:Details>
<my:Name>Some customer</my:Name>
</my:Details>
<my:Orders>
<my:Count>0</my:Count>
<my:OrderList>
</my:OrderList>
</my:Orders>
</my:Customer>
</my:Data>
Run Code Online (Sandbox Code Playgroud)
(参见空单列表).
在Word中,xml窗格反映了正确的数据(意味着没有Order节点):
但正如您所看到的,模板内容仍然存在.
基本上,我想在没有订单(或至少是空表)时隐藏订单清单.
我怎样才能做到这一点?
PS:如果它可以提供帮助,我上传了单词和xml文件,以及一个注入数据的小型PowerShell脚本:repro.zip
感谢您分享您的文件,以便我们更好地帮助您。
我在尝试使用现有的 Word 内容控件、XML 文件以及将 XML 添加到 Word 文档的 PowerShell 脚本来解决您的问题时遇到了困难。我找到了似乎是Microsoft 的 VSTO 示例解决方案来解决您的问题,但我无法让它正常工作。
不过,我能够编写一个简单的 C# 控制台应用程序,该应用程序根据 XML 数据生成 Word 文件。用于生成 Word 文件的 OpenXML 代码是从 Open XML Productivity Tool 生成的代码。然后,我添加了一些逻辑来读取 XML 文件并根据数据中的订单数量动态生成第二个表行。 如果您对此解决方案感兴趣,我已上传代码供您使用。注意:xml 数据文件应位于 c:\temp 中,生成的 word 文件也将位于 c:\temp 中。
此解决方案的另一个额外好处是,如果您要将所有客户数据添加到一个 XML 文件中,应用程序将在您的临时目录中创建单独的 Word 文件,如下所示:
customer_<name1>.docx
customer_<name2>.docx
customer_<name3>.docx
ETC。
希望这可以帮助。