将数据从一个Excel模板转换为另一个Excel模板?

时间:2012-08-14 22:16:09

标签: excel xslt transformation

我想从一个Excel模板(由客户端提供)中获取数据,然后将其转换为我自己的内部Excel模板。

我基本上希望能够编写一个从客户端的Excel模板中调出字段名称的转换(XSLT),然后通过某种映射过程将值导入到我自己的模板中的相应字段中。

有办法做到这一点吗? 例如,客户端可能包含以下列: 名字 姓 地址 电话号码

但是,我的模板可能只有 名字 姓 电话号码

我希望转换只是自动从客户端Excel模板中的三个相应字段中提取值。

这可能吗?如果是这样,我在看什么样的流程?

注意:通过Excel模板,我只是指具有字段和单元格值的格式良好的Excel文件。

1 个答案:

答案 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()

分别