我想从一个Excel模板(由客户端提供)中获取数据,然后将其转换为我自己的内部Excel模板。
我基本上希望能够编写一个从客户端的Excel模板中调出字段名称的转换(XSLT),然后通过某种映射过程将值导入到我自己的模板中的相应字段中。
有办法做到这一点吗? 例如,客户端可能包含以下列: 名字 姓 地址 电话号码
但是,我的模板可能只有 名字 姓 电话号码
我希望转换只是自动从客户端Excel模板中的三个相应字段中提取值。
这可能吗?如果是这样,我在看什么样的流程?
注意:通过Excel模板,我只是指具有字段和单元格值的格式良好的Excel文件。
答案 0 :(得分:1)
是的,这是我看到的过程:
1)从Excel电子表格创建XML数据和模式文件。见this reference.
2)将XML架构导入客户端Excel电子表格。见this reference.
3)也将客户端Excel电子表格导出到XML数据文件中。
4)一举对两个文件进行转换,基本上是:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common">
<xsl:variable name="mine" select="document(/path/to/your.xml)"/>
<xsl:variable name="client" select="document(/path/to/client.xml)"/>
<xsl:variable name="both">
<both>
<xsl:copy-of select="exsl:node-set($mine)/>
<xsl:copy-of select="exsl:node-set($client)/>
</both>
</xsl:variable>
<xsl:template match="exsl:node-set($both)/whatever>
<xsl:apply-templates/>
</xsl:template>
<!-- More templates here to do what you will with all the data,
whether it be copying, sorting first, or etc. -->
</xsl:stylesheet>
5)将结果导回到Excel文档中。
那是相当简单的,我有一段时间没有这样做,所以从那时起,Excel中的版本颠簸可能会改变一些特定的步骤。最后一步需要在转换之外完成,因为XSLT是非破坏性的(不修改输入源文档,但只输出新的结果文档。
此外,它使用XSLT扩展函数exsl:node-set()。根据您使用的工具,即IE,您可能需要将其切换到MSXSL扩展版本。
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
和
msxsl:node-set()
分别