You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
321 lines
12 KiB
321 lines
12 KiB
2 years ago
|
<?xml version="1.0" encoding="UTF-8"?>
|
||
|
<xsl:stylesheet version="1.0"
|
||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:HtmlUtils="de.superx.util.HtmlUtils">
|
||
|
<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>
|