1

我正在使用 XSLT 生成带有日期列的报告。在电子表格 XLSX 文件中,如果我将日期作为字符串传递,当使用 Excel 等电子表格包打开它时,它会假定它是一个日期(这是正确的),然后将其格式化为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>
...
4

1 回答 1

0

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

即,您使用 xs:datetime 格式的日期填充单元格(在您的示例中根本不需要任何 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>
于 2013-07-19T21:40:49.740 回答