Hallo,
ich habe da ein leidiges Problem, was ich schon immer mal in Angriff nehmen wollte. Ziel soll es sein, ein xsl:function zu erstellen, die eine Nummer in eine Spreadsheet Letter Code umwandelt, Also ganz einfach 1 = A, 5 = E; 27 = AA usw. Zur Zeit regele ich das über eine Templatekombination, die zwar ihre Aufgabe erfüllt, aber mir nicht so richtig gefällt und eher auf die schnelle geschrieben wurde. Eher mag ich xf:translate-column-number($ColumnNumber) einfach aufrufen, als die Template kombination. Nur weiss ich nicht so recht wie ich da am besten herangehe unter xslt2.0.
Abfrage erfolgt über:
<xsl:call-template name="translateColumnNumberToColumnLetter">
<xsl:with-param name="currentColumn" select="$ColumnNumber"/>
</xsl:call-template>
<xsl:template name="translateColumnNumberToColumnLetter">
<xsl:param name="currentColumn" select="0"/>
<xsl:param name="FirstLetter" select="0"/>
xsl:choose
<xsl:when test="$FirstLetter < 27">
xsl:choose
<xsl:when test="$currentColumn < 27">
<xsl:call-template name="getColumnLetter">
<xsl:with-param name="FirstLetter" select="$FirstLetter"/>
<xsl:with-param name="SecondLetter" select="$currentColumn"/>
</xsl:call-template>
</xsl:when>
xsl:otherwise
<xsl:call-template name="translateColumnNumberToColumnLetter">
<xsl:with-param name="FirstLetter" select="$FirstLetter + 1"/>
<xsl:with-param name="currentColumn" select="$currentColumn - 26"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
xsl:otherwise
<xsl:value-of select="'only Column to XX supported'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="getColumnLetter">
<xsl:param name="FirstLetter"/>
<xsl:param name="SecondLetter"/>
<xsl:call-template name="ColumnLetter">
<xsl:with-param name="Number" select="$FirstLetter"/>
</xsl:call-template>
<xsl:call-template name="ColumnLetter">
<xsl:with-param name="Number" select="$SecondLetter"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="ColumnLetter">
<xsl:param name="Number"/>
<xsl:if test="$Number != 0">
<xsl:if test="$Number = 1">
xsl:textA</xsl:text>
</xsl:if>
<xsl:if test="$Number = 2">
xsl:textB</xsl:text>
</xsl:if>
<xsl:if test="$Number = 3">
xsl:textC</xsl:text>
</xsl:if>
<xsl:if test="$Number = 4">
xsl:textD</xsl:text>
</xsl:if>
<xsl:if test="$Number = 5">
xsl:textE</xsl:text>
</xsl:if>
<xsl:if test="$Number = 6">
xsl:textF</xsl:text>
</xsl:if>
<xsl:if test="$Number = 7">
xsl:textG</xsl:text>
</xsl:if>
<xsl:if test="$Number = 8">
xsl:textH</xsl:text>
</xsl:if>
<xsl:if test="$Number = 9">
xsl:textI</xsl:text>
</xsl:if>
<xsl:if test="$Number = 10">
xsl:textJ</xsl:text>
</xsl:if>
<xsl:if test="$Number = 11">
xsl:textK</xsl:text>
</xsl:if>
<xsl:if test="$Number = 12">
xsl:textL</xsl:text>
</xsl:if>
<xsl:if test="$Number = 13">
xsl:textM</xsl:text>
</xsl:if>
<xsl:if test="$Number = 14">
xsl:textN</xsl:text>
</xsl:if>
<xsl:if test="$Number = 15">
xsl:textO</xsl:text>
</xsl:if>
<xsl:if test="$Number = 16">
xsl:textP</xsl:text>
</xsl:if>
<xsl:if test="$Number = 17">
xsl:textQ</xsl:text>
</xsl:if>
<xsl:if test="$Number = 18">
xsl:textR</xsl:text>
</xsl:if>
<xsl:if test="$Number = 19">
xsl:textS</xsl:text>
</xsl:if>
<xsl:if test="$Number = 20">
xsl:textT</xsl:text>
</xsl:if>
<xsl:if test="$Number = 21">
xsl:textU</xsl:text>
</xsl:if>
<xsl:if test="$Number = 22">
xsl:textV</xsl:text>
</xsl:if>
<xsl:if test="$Number = 23">
xsl:textW</xsl:text>
</xsl:if>
<xsl:if test="$Number = 24">
xsl:textX</xsl:text>
</xsl:if>
<xsl:if test="$Number = 25">
xsl:textY</xsl:text>
</xsl:if>
<xsl:if test="$Number = 26">
xsl:textZ</xsl:text>
</xsl:if>
</xsl:if>
</xsl:template>