ThomasM: XSLT 2.0 function für Spreadsheetspalten

Beitrag lesen

Hallo Holge r,

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.

...

Nur weiss ich nicht so recht wie ich da am besten herangehe unter xslt2.0.

Hier mal ein Versuch:

<?xml version="1.0" encoding="ISO-8859-1"?>  
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
 xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"  
 xmlns:my="http://example.org/my">  
  
<!-- globale Variable -->  
<xsl:variable name="abisz" select="('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')"/>  
  
<!-- Testaufrufe -->  
<xsl:template match="/">  
  <xsl:value-of select="my:xyz(5)"/><!-- E -->  
  <xsl:text> | </xsl:text>  
  <xsl:value-of select="my:xyz(27)"/><!-- E -->  
  <xsl:text> | </xsl:text>  
  <xsl:value-of select="my:xyz(54)"/><!-- AAB -->  
</xsl:template>  
  
<!-- die eigentliche Funktion -->  
<xsl:function name="my:xyz">  
  <xsl:param name="z"/>  
  
  <xsl:variable name="x" select="$z div 26"/>  
  <xsl:value-of select="if($x le 1) then $abisz[$z] else $abisz[1]"/>  
  <xsl:value-of select="if($x gt 1) then my:xyz($z - 26) else()"/>  
</xsl:function>  
  
</xsl:stylesheet>

Grüße,
Thomas