XML - XSL Изменить экспорт в Excel, чтобы установить текст / количество ячеек - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь изменить файл XML, используя файл XSL, для создания электронной таблицы Excel - у меня есть основы этой работы, но все мои ячейки отображаются в виде текстовых ячеек в Excel, но мне нужны некоторые из них показывать в виде чисел, чтобы мы могли правильно выполнять вычисления в Excel.

Вот мой XML:

<?xml version="1.0" encoding="utf-8"?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
    <ERRORCODE>0</ERRORCODE>
    <PRODUCT BUILD="02-13-2018" NAME="FileMaker" VERSION="ProAdvanced 16.0.5"/>
    <DATABASE DATEFORMAT="D/m/yyyy" LAYOUT="" NAME="Assets.fmp12" RECORDS="6" TIMEFORMAT="h:mm:ss a"/>
    <METADATA>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Code" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Country" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Price" TYPE="NUMBER"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Tax" TYPE="NUMBER"/>
    </METADATA>
    <RESULTSET FOUND="2">
        <ROW MODID="0" RECORDID="23">
            <COL>
                <DATA>CH56809</DATA>
            </COL>
            <COL>
                <DATA>Australia</DATA>
            </COL>
            <COL>
                <DATA>1024.64</DATA>
            </COL>
            <COL>
                <DATA>68.45</DATA>
            </COL>
        </ROW>
        <ROW MODID="0" RECORDID="24">
            <COL>
                <DATA>PZ30844</DATA>
            </COL>
            <COL>
                <DATA>Australia</DATA>
            </COL>
            <COL>
                <DATA>2014.64</DATA>
            </COL>
            <COL>
                <DATA>116.5</DATA>
            </COL>
        </ROW>
    </RESULTSET>
</FMPXMLRESULT>

В разделе METADATA вы можете увидеть, является ли каждое поле текстовым или числовым полем:

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Country" TYPE="TEXT"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Price" TYPE="NUMBER"/>

, поэтому мы должны использовать это для установки ячейки в виде числа текста.

Я не уверен в правильном синтаксисе здесь - я считаю, что нам просто нужно изменить этот бит:

<xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
        <Row>
            <!-- Next line inserts an empty column on the left side of the sheet -->
            <!-- This is simply a personal preference of mine :) -->
            <xsl:for-each select="fmp:COL">
                <xsl:variable name="i" select="position()" />
                <Cell ss:StyleID="MyTextStyle1">
                    <Data ss:Type="String">
                        <xsl:value-of select="." />
                    </Data>
                </Cell>
            </xsl:for-each><!-- next column -->
        </Row>
</xsl:for-each><!-- next row -->

но не уверен, как получить это, чтобы учесть тип поля здесь при создании ячейки. Я использую:

 <xsl:stylesheet version="1.0"

1 Ответ

0 голосов
/ 28 июня 2018

Предполагая, что вы правильно установили пространства имен; измените фрагмент на следующий:

<xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
    <Row>
        <!-- Next line inserts an empty column on the left side of the sheet -->
        <!-- This is simply a personal preference of mine :) -->
        <xsl:for-each select="fmp:COL">
            <xsl:variable name="i" select="position()" />
            <xsl:variable name="t" select="/fmp:FMPXMLRESULT/fmp:METADATA/fmp:FIELD[$i]/@TYPE" />
            <xsl:variable name="type">
                <xsl:choose>
                    <xsl:when test="$t='TEXT'">
                        <xsl:value-of select="'String'" />
                    </xsl:when>
                    <xsl:when test="$t='NUMBER'">
                        <xsl:value-of select="'Number'" />
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:message terminate="yes">Unknown Type</xsl:message>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:variable>

            <Cell ss:StyleID="MyTextStyle1">
                <Data ss:Type="{$type}">
                    <xsl:value-of select="." />
                </Data>
            </Cell>
        </xsl:for-each><!-- next column -->
    </Row>
</xsl:for-each><!-- next row -->

Это обрабатывает два типа String и Number в соответствии с определением в fmp:METADATA и устанавливает его в шаблоне значения атрибута ss:Type="{$type}". Неизвестный тип останавливает обработку и выдает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...