我正在尝试创建一个xslt文件,该文件将采用欧元,日元,英镑或美元的货币值,并将它们显示在Excel输出中。为此,我创建了以下条件来捕获货币:
<Style ss:ID="s63">
<xsl:choose>
<xsl:when test='$currency = "EUR"'>
<NumberFormat ss:Format="_("€"\ * #,##0.00_);_("€"\ * \(#,##0.00\);_("€"\ * "-"??_);_(@_)"/>
</xsl:when>
<xsl:when test='$currency = "JPY"'>
<NumberFormat ss:Format="_("¥"\ * #,##0.00_);_("€"\ * \(#,##0.00\);_("€"\ * "-"??_);_(@_)"/>
</xsl:when>
<xsl:when test='$currency = "GBP"'>
<NumberFormat ss:Format="_-[$£-809]* #,##0.00_-;\-[$£-809]* #,##0.00_-;_-[$£-809]* "-"??_-;_-@_-"/>
</xsl:when>
<xsl:otherwise>
<NumberFormat ss:Format=""$"#,##0.00"/>
</xsl:otherwise>
</xsl:choose>
</Style>
这实际上效果很好。正如所料,我得到了适当的货币符号。我遇到的问题是欧元。出于某种原因,我的所有货币值都乘以100.我怀疑它与EUR的传入格式有关,###。###,00格式,转换为#,## 0.00格式。但是,我不能让Excel将###。###,00作为有效格式。有谁知道如何让我的货币不增加?提前谢谢!
答案 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货币的行循环,另一行循环捕获所有其他货币。这最终给我一个数字,其中欧元符号出现在数字之前,但数字的格式是使用逗号作为千位分隔符和句点作为小数点。我正在创建的电子表格不是面向客户的,因此这不是问题。
感谢那些评论的人!希望这将有助于任何面临同样挑战的人。