2013-03-06 100 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>