Форматирование ячеек в файлах XSLX, сгенерированных XSLT

Я использую 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>

Я пытался обойти это другими способами, например, начать ячейку с ', но, как ни странно, это не сработало!

Вот пример XML, относящийся к приведенному выше XSLT:

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

person ingh.am    schedule 06.03.2013    source источник
comment
Не могли бы вы опубликовать небольшой образец фактического генерируемого XML (подойдет только образец с одной или двумя строками)? Спасибо!   -  person Tim C    schedule 07.03.2013
comment
Это XML до или вы также выполняете преобразование?   -  person Tim C    schedule 08.03.2013
comment
XML, переданный в XSLT. Вывод XLSX для Excel.   -  person ingh.am    schedule 08.03.2013
comment
XLSX на самом деле является двоичным файлом (это zip-файл). Вы имеете в виду Excel XML в качестве вывода? Это может помочь, если вы опубликуете фрагмент вывода. Если это Excel XML, я думаю, что смогу помочь....   -  person Tim C    schedule 08.03.2013


Ответы (1)


Форматирование ячеек в 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>
person Ilya Kharlamov    schedule 19.07.2013