外币到Excel xslt

时间:2014-04-08 20:46:58

标签: xml excel xslt

我正在尝试创建一个xslt文件,该文件将采用欧元,日元,英镑或美元的货币值,并将它们显示在Excel输出中。为此,我创建了以下条件来捕获货币:

    <Style ss:ID="s63">
    <xsl:choose>
    <xsl:when test='$currency = "EUR"'>
    <NumberFormat ss:Format="_(&quot;€&quot;\ * #,##0.00_);_(&quot;€&quot;\ * \(#,##0.00\);_(&quot;€&quot;\ * &quot;-&quot;??_);_(@_)"/>
    </xsl:when> 
    <xsl:when test='$currency = "JPY"'>
    <NumberFormat ss:Format="_(&quot;¥&quot;\ * #,##0.00_);_(&quot;€&quot;\ * \(#,##0.00\);_(&quot;€&quot;\ * &quot;-&quot;??_);_(@_)"/>
    </xsl:when>
    <xsl:when test='$currency = "GBP"'>
    <NumberFormat ss:Format="_-[$£-809]* #,##0.00_-;\-[$£-809]* #,##0.00_-;_-[$£-809]* &quot;-&quot;??_-;_-@_-"/>
    </xsl:when>
    <xsl:otherwise>
    <NumberFormat ss:Format="&quot;$&quot;#,##0.00"/>
    </xsl:otherwise>
    </xsl:choose>
    </Style>

这实际上效果很好。正如所料,我得到了适当的货币符号。我遇到的问题是欧元。出于某种原因,我的所有货币值都乘以100.我怀疑它与EUR的传入格式有关,###。###,00格式,转换为#,## 0.00格式。但是,我不能让Excel将###。###,00作为有效格式。有谁知道如何让我的货币不增加?提前谢谢!

1 个答案:

答案 0 :(得分:0)

我想出来了。我基本上需要将传入的值视为字符串,因为Excel不喜欢#。###,00格式。所以首先我通过以下方式将值转换为正确格式的数字:

    <xsl:variable name="extCost" select="number(translate(extendedCost_line,'###.##0,00','###0.00'))"></xsl:variable>

一旦我设置了变量,我就可以格式化我的数字:

    <Cell ss:StyleID="s63">
    <Data ss:Type="Number"><xsl:value-of select="format-number(($extCost div 100), '#,##0.00', 'american')" /></Data>
    </Cell>

这迫使我创建一个特定于EUR货币的行循环,另一行循环捕获所有其他货币。这最终给我一个数字,其中欧元符号出现在数字之前,但数字的格式是使用逗号作为千位分隔符和句点作为小数点。我正在创建的电子表格不是面向客户的,因此这不是问题。

感谢那些评论的人!希望这将有助于任何面临同样挑战的人。