2013-03-06 94 views
1

我正在使用XSLT生成包含日期列的报表。在电子表格XLSX文件中,如果以字符串的形式传递日期,当使用Excel等电子表格软件包打开它时,它会假定它是一个日期(这是正确的),但是当我们真正想要的是将其格式化为MM/dd/yyyydd/MM/yyyy。这似乎是造成这种情况的电子表格软件包,但是我想知道是否可以从XSLT定义单元格格式?格式化XSLT生成的XSLX文件中的单元格

下面是代码我使用这样做:

<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> 
... 
+0

你可以发布一个实际的XML正在生成的小样本(只有一个或两个行的样本将做)?谢谢! – 2013-03-07 13:42:03

+0

已发布,谢谢;) – 2013-03-07 17:47:43

+0

这是XML之前还是你做的转换? – 2013-03-07 22:14:41

回答

0

在Excel XML中的单元格格式可以通过风格来完成。

即你填充单元格的日期中的xs:datetime格(你不需要任何MS:格式日期转换在你的例子在所有),但指定虽然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>