<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version= "1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href= "pageComponents_html.xsl" />
<!-- In diesem Stylesheet können Sie individuelle templates unterbringen,
die in ihrer Präzedenz das normale Stylesheet
pageComponents_html.xsl überragt. -->
<xsl:import href= "pageComponents_html_final.xsl" />
<xsl:import href= "resultset_html.xsl" />
<xsl:import href= "interLinks_html.xsl" />
<xsl:decimal-format name= "German" grouping-separator= "." NaN= "" zero-digit = "0" decimal-separator= "," />
<xml:output method= "application/vnd.ms-excel" />
<xsl:template match= "/" >
<xsl:call-template name= "xlsworkbook" />
</xsl:template>
<xsl:template name= "xlsworkbook" >
<xls_workbook vorlage= "" >
<!-- define the xl styles -->
<xsl:call-template name= "xls_Styles" />
<!-- Seitenformat -->
<xsl:call-template name= "xls_PageFormat" />
<!-- define the xl data for the first sheet -->
<xsl:for-each select= "ergebnisse/ergebnis/ergebniselement" >
<xsl:choose >
<xsl:when test= "@typ='image'" >
<xsl:text >
</xsl:text>
</xsl:when>
<xsl:when test= "@typ='tabelle'" >
<xsl:call-template name= "xslsheet" />
</xsl:when>
<xsl:otherwise >
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xls_workbook>
</xsl:template>
<xsl:template name= "xslsheet" >
<xls_sheet name= "{../maskenname}" >
<xls_row height= "600" >
<xls_cell style= "maskenname" width= "10000" > <xsl:value-of select= "../maskenname" /> </xls_cell>
</xls_row>
<xsl:call-template name= "legende_xl" > </xsl:call-template>
<xls_row height= "1000" > <xls_cell > </xls_cell> </xls_row>
<xsl:call-template name= "xlsheader" />
<xsl:call-template name= "xslrows" />
</xls_sheet>
</xsl:template>
<xsl:template name= "xslrows" >
<xsl:for-each select= "sqlerg/row" >
<xsl:call-template name= "xslsinglerow" />
</xsl:for-each>
</xsl:template>
<xsl:template name= "xslsinglerow" >
<xsl:variable name= "erglevelmax" >
<xsl:if test= "count(../../sqlerg/row/col [ f_name = 'ebene' ]) > 0" >
<xsl:choose >
<xsl:when test= "count(../../sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '4']) > 0" >
<xsl:text > 4</xsl:text>
</xsl:when>
<xsl:when test= "count(../../sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '3']) > 0" >
<xsl:text > 3</xsl:text>
</xsl:when>
<xsl:when test= "count(../../sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '2']) > 0" >
<xsl:text > 2</xsl:text>
</xsl:when>
<xsl:when test= "count(../../sqlerg/row/col [ f_name = 'ebene' ] /wert [ . = '1']) > 0" >
<xsl:text > 1</xsl:text>
</xsl:when>
<xsl:otherwise >
<xsl:text > 5</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:variable>
<!-- Hinweis: Wenn für die row eine Ebene angegeben ist, wird die Darstellung vom Server definiert
Style der Zelle (z.B. body_dec) wird ignoriert, Attribut numeric ist wichtig für Darstellung,
per datatype decimal wird Nachkommastellenanzeige eingestellt-->
<xls_row >
<!-- DQ 14.12.07 In Zukunft noch erglevelmax auswerten when$erglevelmax = 5 and -->
<xsl:if test= "count(col[ f_name = 'ebene' ]) > 0" >
<xsl:attribute name= "ebene" > <xsl:value-of select= "6-$erglevelmax+number(col[ f_name = 'ebene' ]/wert)" /> </xsl:attribute>
</xsl:if>
<xsl:if test= "@issumme='true'" >
<xsl:attribute name= "ebene" > <xsl:value-of select= "'summe'" /> </xsl:attribute>
</xsl:if>
<!-- MB keine Zelle für Linkspalten, 4/2010 keine versteckten Spalten -->
<xsl:for-each select= "col[(starts-with(f_name,'hidden'))=false and starts-with(f_name,'next') = false ]" >
<xls_cell >
<xsl:variable name= "checkname" > <xsl:value-of select= "concat('hidden',f_name,'dp')" /> </xsl:variable>
<xsl:choose > <!-- MB wenn es eine versteckte hidden_decimalpl gibt auswerten -->
<!-- MB 4/2010 wenn decimalzahl aber decimalplaces=0 als nicht als decimal sondern integer ausgeben s.u. -->
<!-- typ 8 timestamp nicht als Decimalzahl sondern Text ausgeben -->
<xsl:when test= "(@typ='2' or @typ='3') and count(../col[f_name=$checkname]) = 0" > <!-- DecimalFormat -->
<xsl:attribute name= "style" > body_dec</xsl:attribute>
<xsl:attribute name= "numeric" > true</xsl:attribute>
<xsl:attribute name= "datatype" > decimal</xsl:attribute>
<xsl:choose >
<xsl:when test= "wert != ''" >
<xsl:value-of select= "wert" />
<!-- <xsl:value - of select="format - number(wert,'###.###.###.###.##0,00','German')" /> -->
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "' '" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test= "(@typ='2' or @typ='3') and count(../col[f_name=$checkname]) >0 and ../col[f_name=$checkname]/wert!='0'" > <!-- DecimalFormat -->
<xsl:attribute name= "style" > body_dec</xsl:attribute> <!-- row.ebene überlagert ggfs! -->
<xsl:attribute name= "numeric" > true</xsl:attribute>
<xsl:attribute name= "datatype" > decimal</xsl:attribute>
<!-- <xsl:value - of select="wert" /> -->
<xsl:choose >
<xsl:when test= "wert != ''" >
<xsl:value-of select= "wert" />
<!-- <xsl:value - of select="format - number(wert,'###.###.###.###.##0,00','German')" /> -->
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "' '" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test= "../col[f_name=$checkname]/wert='0' or @typ='4' or @typ='5'" > <!-- MB: Integer/ auch typ 5 Smallint -->
<xsl:attribute name= "style" > body_int</xsl:attribute> <!-- row.ebene überlagert ggfs! -->
<xsl:attribute name= "numeric" > true</xsl:attribute>
<xsl:attribute name= "datatype" > integer</xsl:attribute>
<!-- <xsl:value - of select="wert" /> -->
<xsl:choose >
<xsl:when test= "wert != ''" >
<!-- MB formatierung format - number(wert,'###.###.###.###.###','German') raus, macht Excel selbst -->
<xsl:value-of select= "wert " />
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "' '" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<!-- deutsche datumsfelder können von POI noch nicht richtig verarbeitet werden
<xsl:when test= "@typ='91'" >
<xsl:attribute name= "style" > body_date</xsl:attribute>
<xsl:attribute name= "datatype" > date</xsl:attribute>
<xsl:value-of select= "wert " />
</xsl:when>
-->
<xsl:otherwise >
<!-- Typ=1 ist string und wird defaultmäßig behandelt -->
<xsl:attribute name= "style" > body</xsl:attribute> <!-- row.ebene überlagert ggfs! -->
<xsl:call-template name= "field_type" />
<!-- MB 8/2015 da next... eh nicht angezeigt werden kann auf resultsetLink verzichtet werden,
so kommen bei Usern die emailadressen als reiner text raus
<xsl:variable name= "zs" >
<xsl:call-template name= "field_value" >
</xsl:call-template>
</xsl:variable>
<xsl:call-template name= "resultsetLink" >
<xsl:with-param name= "zs2" select= "$zs" />
</xsl:call-template>
-->
<xsl:call-template name= "field_value" />
<!-- MB 5.5.08 ablegen in zs3 und aufruf von get_val_or_nbsp nicht nötig -->
</xsl:otherwise>
</xsl:choose>
</xls_cell>
</xsl:for-each> <!-- cell -->
</xls_row>
</xsl:template>
<xsl:template name= "xlsheader" >
<xsl:choose >
<xsl:when test= "/ergebnisse/ergebnis/ergebniselement/sqlerg/headers/@hasAggregationHeaders='true'" >
<xsl:variable name= "nr_rows" > <xsl:value-of select= "count(sqlerg/aggregationHeaders/tr)" /> </xsl:variable>
<xsl:for-each select= "sqlerg/aggregationHeaders/tr" >
<!-- AK 20.08.2014 Der Header bekommt eine höhere Zeile -->
<xls_row height= "600" >
<xsl:if test= "position()=1" >
<xsl:attribute name= "repeating" > <xsl:value-of select= "$nr_rows" /> </xsl:attribute>
</xsl:if>
<xsl:for-each select= "th" >
<xsl:if test= "starts-with(@f_name,'next') = false and starts-with(@f_name,'hidden') = false" >
<xls_cell style= "heading" >
<xsl:attribute name= "width" > <xsl:value-of select= "@width * 280" /> </xsl:attribute>
<xsl:if test= "@colspan != ''" >
<xsl:attribute name= "colspan" > <xsl:value-of select= "@colspan" /> </xsl:attribute>
</xsl:if>
<xsl:if test= "@rowspan != ''" >
<xsl:attribute name= "rowspan" > <xsl:value-of select= "@rowspan" /> </xsl:attribute>
</xsl:if>
<xsl:call-template name= "removeBackslashN" >
<xsl:with-param name= "derwert" > <xsl:value-of select= "." /> </xsl:with-param>
<xsl:with-param name= "format" > <xsl:value-of select= "'xls'" /> </xsl:with-param>
</xsl:call-template>
</xls_cell>
</xsl:if>
</xsl:for-each>
</xls_row>
</xsl:for-each>
</xsl:when>
<xsl:otherwise >
<!-- alt Normale headers -->
<xls_row repeating= "true" >
<!-- MB 04/2010 versteckte Spalten nicht kein Header für Linkspalten --> -->
<xsl:for-each select= "sqlerg/headers/header[(starts-with(f_name,'hidden'))=false and starts-with(f_name,'next') = false ]" >
<xsl:call-template name= "xlssingleheader" >
<xsl:with-param name= "derwert" select= "wert" />
</xsl:call-template>
</xsl:for-each>
</xls_row>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name= "xlssingleheader" >
<xsl:param name= "derwert" />
<xls_cell style= "heading" >
<xsl:attribute name= "width" > <xsl:value-of select= "@width * 280" /> </xsl:attribute>
<!-- max. 2 Umbrüche pro Zelle -->
<!-- <xsl:value - of select="string($derwert) "/> -->
<xsl:variable name= "header1" >
<xsl:choose >
<xsl:when test= "(contains(string($derwert),'\n'))" >
<xsl:value-of select= "substring-before($derwert,'\n') " />
<xsl:text >
</xsl:text>
<xsl:value-of select= "substring-after($derwert,'\n') " />
</xsl:when>
<xsl:otherwise >
<xsl:copy-of select= "$derwert" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name= "header2" >
<xsl:choose >
<xsl:when test= "(contains(string($header1),'\n'))" >
<xsl:value-of select= "substring-before($header1,'\n') " />
<xsl:text >
</xsl:text>
<xsl:value-of select= "substring-after($header1,'\n') " />
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "$header1" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose >
<xsl:when test= "(contains(string($header2),'\000'))" >
<xsl:value-of select= "substring-before($header2,'\000') " />
<xsl:text >
</xsl:text>
<xsl:value-of select= "substring-after($header2,'\000') " />
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "$header2" />
</xsl:otherwise>
</xsl:choose>
</xls_cell>
</xsl:template>
<xsl:template name= "legende_xl" >
<xls_row height= "1000" >
<xls_cell style= "legende" >
<xsl:for-each select= "../felder/feld" >
<xsl:if test= "(value !='' or sicht/@isFirstInGroup='false' or @isstandtoday='false') and @varname != 'sort' and @varname != 'maxoffset' and @varname!='##line##' " >
<xsl:choose >
<xsl:when test= "string-length(caption_short) > 0 and caption_short != 'null'" >
<![CDATA[]]> <xsl:value-of select= "normalize-space(string(caption_short))" /> <![CDATA[]]>
</xsl:when>
<xsl:otherwise >
<![CDATA[]]> <xsl:value-of select= "normalize-space(string(@varname))" /> <![CDATA[]]>
</xsl:otherwise>
</xsl:choose> <xsl:text > : </xsl:text>
<![CDATA[]]> <xsl:value-of select= "normalize-space(string(value_caption))" /> <![CDATA[]]>
<!-- bei Mehrfachauswahl keine Einschränkung auf 50 Zeichen sinnvoll
<xsl:if test= "string-length(wert/caption) < 50" >
<![CDATA[]]> <xsl:value-of select= "normalize-space(string(value_caption))" /> <![CDATA[]]>
</xsl:if>
<xsl:if test= "string-length(wert/caption) > 49" >
<![CDATA[]]> <xsl:value-of select= "substring(value_caption,0,50)" /> <![CDATA[]]> <xsl:text > ...</xsl:text>
</xsl:if> -->
<xsl:if test= "sicht!=''" >
<![CDATA[]]> <xsl:text > (</xsl:text> <xsl:value-of select= "sicht" />
<xsl:if test= "@stand!=''" > <xsl:text > - Stand:</xsl:text> <xsl:value-of select= "@stand" /> </xsl:if>
<xsl:text > )</xsl:text> <![CDATA[]]>
</xsl:if>
<xsl:text > ; </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text > User: </xsl:text> <xsl:value-of select= "/ergebnisse/user" />
<xsl:text > ; Stand: </xsl:text> <xsl:value-of select= "../stand" />
</xls_cell>
</xls_row>
<xsl:if test= "../hinweis!=''" >
<xls_row height= "1000" > <xls_cell style= "legende" > <xsl:value-of select= "../hinweis" /> </xls_cell> </xls_row>
</xsl:if>
</xsl:template>
</xsl:stylesheet>