我正在尝试插入一个基于数据源 XML 的表格。我希望此 XML 作为单个合并字段输入,该字段将与其他合并字段一起提供。我正在使用的限制是合并文档必须是一行对应一个文档。
下面是可能的 XML 示例;
<?xml version="1.0" encoding="utf-8"?>
<PaymentPlanInstalments>
<Instalment Number="1" Date="2018-12-04" Amount="10"></Instalment>
<Instalment Number="2" Date="2018-12-05" Amount="20"></Instalment>
<Instalment Number="3" Date="2018-12-06" Amount="30"></Instalment>
</PaymentPlanInstalments>
我已设法使用 /INCLUDETEXT 获得概念验证,并使用下面的 xsl 格式样式表将上述 XML 保存在文件中
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<xsl:processing-instruction name="mso-application">
<xsl:text>progid="Word.Document"</xsl:text>
</xsl:processing-instruction>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no">
<w:body>
<wx:sect>
<w:tbl>
<w:tblPr>
<w:tblW w:w="0" w:type="auto" />
</w:tblPr>
<w:tblGrid>
<w:gridCol w:w="4000" />
<w:gridCol w:w="4000" />
<w:gridCol w:w="4000" />
</w:tblGrid>
<w:tr>
<w:trPr>
<w:tblHeader />
</w:trPr>
<w:tc>
<w:tcPr>
<w:tcW w:w="4000" w:type="dxa" />
<w:shd w:val="clear" w:color="auto" w:fill="auto" />
</w:tcPr>
<w:p>
<w:r>
<w:t>Instalment Number</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4000" w:type="dxa" />
<w:shd w:val="clear" w:color="auto" w:fill="auto" />
</w:tcPr>
<w:p>
<w:r>
<w:t>Instalment Date</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4000" w:type="dxa" />
<w:shd w:val="clear" w:color="auto" w:fill="auto" />
</w:tcPr>
<w:p>
<w:r>
<w:t>Instalment Amount</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<xsl:for-each select="//PaymentPlanInstalments/Instalment">
<w:tr>
<w:tc>
<w:tcPr>
<w:tcW w:w="4000" w:type="dxa" />
<w:shd w:val="clear" w:color="auto" w:fill="auto" />
</w:tcPr>
<w:p>
<w:r>
<w:t>
<xsl:value-of select="@Number" />
</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4000" w:type="dxa" />
<w:shd w:val="clear" w:color="auto" w:fill="auto" />
</w:tcPr>
<w:p>
<w:r>
<w:t>
<xsl:value-of select="@Date" />
</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4000" w:type="dxa" />
<w:shd w:val="clear" w:color="auto" w:fill="auto" />
</w:tcPr>
<w:p>
<w:r>
<w:t>
<xsl:value-of select="@Amount" />
</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</xsl:for-each>
</w:tbl>
<w:p />
<w:sectPr>
<w:pgSz w:w="11906" w:h="16838" />
<w:pgMar w:top="1417" w:right="1417" w:bottom="1134" w:left="1417" w:header="708" w:footer="708" w:gutter="0" />
<w:cols w:space="708" />
<w:docGrid w:line-pitch="360" />
</w:sectPr>
</wx:sect>
</w:body>
</w:wordDocument>
</xsl:template>
</xsl:stylesheet>
这将生成下表(抱歉,我是被 Stack Overflow 发到这里来的,我没有 10 个代表来嵌入图像)
https://i.stack.imgur.com/HBhGJ.png
底层包含的文本如下所示:
{INCLUDETEXT sample.xml \c XML \t sample2.xsl}
请注意,sample.xml 和 sample2.xsl 与 word 文档存储在同一个目录中,并包含上述数据和格式规则。
但是我遇到的问题是,一旦我将 XML 添加到合并字段记录,我就无法再应用 XSL 转换。
使用邮件合并功能可以实现这个功能吗?
如果无法将 XSL 格式应用于合并字段,是否有其他解决方案可以将表添加到单个合并字段?
编辑:我提出了部分解决方案,但它对我的业务需求没有用。我做这个补充是为了万一其他人遇到同样的问题,并且这对他们有用。
我添加了一个名为 InstalmentFile 的新合并字段,其中包含将用于构建表的 XML 文件的名称,并在 INCLUDETEXT 中提供,表格底层代码现在读取
{INCLUDETEXT "{MERGEFIELD InstalmentFile}" \c XML \t sample2.xsl}
这将加载外部 xml 文件并应用 xsl 转换。
我已经修改了生成邮件合并数据源的数据库进程,以返回我将生成的 XML 文件的名称,同时将邮件合并数据集中的 XML 转储到与邮件合并模板位于同一位置的文件中。
不幸的是,这不能解决我的问题,因为生成和清理 XML 文件有点太麻烦了。所以如果有人有任何想法,我仍然很高兴听到他们!