XSLT - разбор даты и времени - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь установить атрибут типа ячейки в 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?). У меня два вопроса:

  1. Это ожидаемое поведение, при котором он не может анализировать значения временного интервала в DateTime?
  2. Это нормальное поведение, при котором он не может анализировать 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...