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.
Hier eine andere Lösung:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:sdml="http://www.selfhtml.org" exclude-result-prefixes="sdml">
<xsl:variable name="spalten">
<xsl:for-each select="1 to 78">
<spalte id="{position()}" />
</xsl:for-each>
</xsl:variable>
<xsl:function name="sdml:createColumLetter">
<xsl:param name="l" />
<xsl:param name="c" />
<xsl:param name="n" />
<xsl:variable name="letters" select="tokenize('A B C D E F G H I J K L M N O P Q R S T U V W X Y Z', ' ')" />
<xsl:sequence select="if(($n div 26) <= 1) then concat($l, $letters[position() = $n]) else sdml:createColumLetter(concat($l, $letters[position() = $c]), ($c + 1), ($n - 26))"></xsl:sequence>
</xsl:function>
<xsl:template match="/">
<xsl:for-each select="$spalten/spalte">
<spalte name="{@id}" id="{sdml:createColumLetter('', 1, @id)}" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
das XSL an sich angewendet liefert:
<?xml version="1.0" encoding="UTF-8"?>
<spalte name="1" id="A"/>
...
<spalte name="5" id="E"/>
...
<spalte name="26" id="Z"/>
<spalte name="27" id="AA"/>
...
<spalte name="52" id="AZ"/>
<spalte name="53" id="ABA"/>
...
<spalte name="78" id="ABZ"/>
Grüße
Thomas