格式化由XSLT生成的XSLX文件中的单元格

我正在使用XSLT生成包含date列的报表。 在电子表格XLSX文件中,如果我将date作为string传递,当使用电子表格软件包(如Excel)打开它时,它将假定它是一个date(这是正确的),然后将其格式化为MM/dd/yyyy我们实际上想要的是dd/MM/yyyy 。 这似乎是造成这种情况的电子表格软件包,但是我想知道是否可以从XSLT定义单元格格式?

这里是我用来做到这一点的代码:

 <xsl:template match="SomeTemplate"> <Row> ... <Cell> <xsl:value-of select="ms:format-date(StartTime, 'dd/MM/yyyy')" /> <xsl:text> </xsl:text> <xsl:value-of select="ms:format-time(StartTime, 'HH:mm:ss')" /> </Cell> ... </Row> </xsl:template> 

我试图用其他方法来解决这个问题,比如用'但是奇怪的是这不起作用!

以下是与上述XSLT相关的XML示例:

 ... <Destination> <StartTime>2013-03-07T00:01:09</StartTime> <EndTime>2013-03-07T10:41:09</EndTime> ... </Destination> ... 

Excel xml中的单元格格式可以通过样式完成。

即你用xs:datetime格式填充date单元(在你的例子中你根本不需要任何ms:format-date转换),但通过ss:styleId指定单元格样式:

 <Destination> <StartTime>2013-03-07T00:01:09</StartTime> <EndTime>2013-03-07T10:41:09</EndTime> </Destination> 

+

 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns="urn:schemas-microsoft-com:office:spreadsheet" version="1.0"> <xsl:template match="/"> <Workbook> <Styles> <Style ss:ID="style_default"> <NumberFormat ss:Format="Short Date"/> </Style> <Style ss:ID="style_ddslashmmslashyy"> <NumberFormat ss:Format="dd/mm/yy;@"/> </Style> </Styles> <Worksheet ss:Name="Sheet1"> <Table> <xsl:apply-templates/> </Table> </Worksheet> </Workbook> </xsl:template> <xsl:template match="Destination"> <Row> <Cell ss:StyleID="style_default"> <Data ss:Type="DateTime"><xsl:value-of select="StartTime"/></Data> </Cell> <Cell ss:StyleID="style_ddslashmmslashyy"> <Data ss:Type="DateTime"><xsl:value-of select="StartTime"/></Data> </Cell> </Row> </xsl:template> </xsl:stylesheet>