Я пытаюсь установить атрибут типа ячейки в Excel через XSL. Следует посмотреть на отчет / лист / определение / столбец и посмотреть, есть ли атрибут type
. Если да, он должен установить тип ячейки на этот тип и отформатировать его в режиме полного времени (или даты / времени).
Мои xml данные:
<report>
<sheet>
<definition>
<columns>
<column name="Code" footerText="ISO Code" width="80" />
<column name="Time" footerText="Time" format="DateTime" width="58" type="DateTime" />
<column name="Country" footerText="Country" width="100" />
<column name="SomeNumber" footerText="Country" width="100" type="Number"/>
</columns>
</definition>
<data>
<table>
<row>
<column value="2020-04-02" key="DATE" />
</row>
<row>
<column value="123" />
<column value="10:30" />
<column value="Belarus" />
<column value="0" />
</row>
<row>
<column value="321" />
<column value="12:00" />
<column value="Austria" />
<column value="0" />
</row>
<row>
<column value="2020-04-03" key="DATE" />
</row>
<row>
<column value="456" />
<column value="08:00" />
<column value="USA" />
<column value="24" />
</row>
</table>
</data>
</sheet>
</report>
Я попытался распечатать $ type и $ index в ячейке, и они действительно распечатываются правильно, но когда я пытаюсь принять значение $type
и использовать для <xsl:attribute name="ss:Type">
, Excel выдает мне сообщение об ошибке, сообщающее, что у него возникли проблемы во время загрузки. После проверки журналов выясняется, что он не может анализировать значения типа 12:00
во время (или я должен сказать DateTime?). У меня два вопроса:
- Это ожидаемое поведение, при котором он не может анализировать значения временного интервала в DateTime?
- Это нормальное поведение, при котором он не может анализировать
2020-01-01
как DateTime а также?
<xsl:for-each select="data/table/row">
<ss:Row>
<xsl:variable name="set" select="column" />
<xsl:variable name="count" select="count($set)"/>
<xsl:for-each select="column">
<ss:Cell>
<xsl:variable name="index" select="position()"/>
<xsl:variable name="type" select="../../../definition/columns/column[$index]/@type"/>
<xsl:attribute name="ss:MergeAcross">
<xsl:choose>
<xsl:when test="$count>1">
<xsl:value-of select="0"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$mergeAcrossHeader"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<ss:Data>
<xsl:attribute name="ss:Type">
<xsl:choose>
<xsl:when test="$type!=''">
<xsl:value-of select="$type" />
</xsl:when>
<xsl:otherwise>
<xsl:text>String</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:value-of select="@value" />
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
</xsl:for-each>