我正在使用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>
然后我使用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>
(参见空单列表)。
在Word中,xml窗格反映了正确的数据(意味着没有Order节点):
但正如您所见,模板内容仍在此处。
基本上,我想在没有订单时(或至少是空表)隐藏订单清单。
我该怎么做?
PS:如果它可以提供帮助,我上传了单词和xml文件,以及一个注入数据的小型PowerShell脚本:repro.zip
答案 0 :(得分:1)
感谢您分享您的文件,以便我们为您提供更好的帮助。
我很难用现有的Word内容控件,XML文件和将XML添加到Word文档的PowerShell脚本来解决您的问题。我发现你的问题似乎是Microsoft's VSTO example solution,但我无法干净利落地工作。
然而,我能够编写一个简单的C#控制台应用程序,该应用程序根据您的XML数据生成Word文件。用于生成Word文件的OpenXML代码是从Open XML Productivity Tool生成的代码。然后,我添加了一些逻辑来读取您的XML文件,并根据数据中的订单数量动态生成第二个表行。 I have uploaded the code for you to use if you are interested in this solution。注意:xml数据文件应该在c:\ temp中,生成的word文件也在c:\ temp中。
此解决方案的另一个额外好处是,如果您要将所有客户数据添加到一个XML文件中,应用程序将在您的临时目录中创建单独的word文件,如下所示:
method_to
customer_<name1>.docx
customer_<name2>.docx
等
希望这有帮助。