Joerg: OO-Calc-Exportfilter - Probleme mit number-columns-repeated

Beitrag lesen

Hi Holger,

danke für die Antwort.

<table:table-cell table:number-columns-repeated="3"/>
<table:covered-table-cell table:number-columns-repeated="2"/>
<table:table-cell table:number-columns-repeated="2"/>
table:covered-table-cell/

Dies konnte ich nicht beobachten:

[...]  
</table:table-cell>  
<table:table-cell table:number-columns-repeated="3">  
 <text:p>0</text:p>  
</table:table-cell>  
[...]  

Mein ExcelSheet ist von der Anlage her schon einige Jahre alt und bearbeite das in Calc weiter.

Die Idee mit exslt:node-set hat mich sofort gepackt, bringe das aber nicht richtig zustande. Und ob mein Calc mit xmlns:xalan klar kommt, hmm...

Hier mein (abgespecktes) StyleSheet:

<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
   xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"  
   xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"  
   xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"  
   exclude-result-prefixes="office table text">  
  
  
	<xsl:output method = "xml" indent = "yes" encoding = "UTF-8" omit-xml-declaration = "yes"/>  
	<xsl:param name="targetURL"/>  
	<xsl:strip-space elements="*"/>  
  
	<xsl:template match="/">  
		<datasheet>  
			<xsl:apply-templates select="//table:table[1]"/> <!-- Nur 1. Tabellenblatt verwenden! -->  
		</datasheet>  
	</xsl:template>  
	  
	<xsl:template match="table:table">  
		<xsl:variable name="col-repeater" select="4"/><!-- Spalte mit Repeated-Attribut -->  
		<xsl:variable name="col-master" select="3"/> <!-- Spalte mit Master -->  
		<xsl:variable name="col-lang" select="12"/><!-- Spalte mit Sprachkuerzel -->		  
  
		<xsl:for-each select="table:table-row">	  
			  
			<!-- einige Spalten haben einen 'Repeater'-Wert -->  
			<xsl:variable name="repeater">  
				<xsl:choose>  
					<xsl:when test="table:table-cell[$col-repeater]/@table:number-columns-repeated">  
						<xsl:value-of select="table:table-cell[$col-repeater]/@table:number-columns-repeated"/>  
					</xsl:when>  
					<xsl:otherwise>0</xsl:otherwise>  
				</xsl:choose>  
			</xsl:variable>  
  
			<!-- Ermittlen, wo sich die Sprache befindet: -->  
			<xsl:variable name="repeater_lang">  
				<xsl:choose>  
					<xsl:when test="$repeater>0">  
						<xsl:value-of select="$col-lang - $repeater + 1"/>  
					</xsl:when>  
					<xsl:otherwise>  
						<xsl:value-of select="$col-lang"/>  
					</xsl:otherwise>  
				</xsl:choose>  
			</xsl:variable>  
  
			<-- Sprache speichern -->  
			<xsl:variable name="land" select="table:table-cell[position()=$repeater_lang]/text:p"/>  
			  
			<!-- Spalten quasi konstant definieren -->  
			<xsl:variable name="colclientid" select="$repeater_lang - 3"/>			  
			<xsl:variable name="colversion" select="$repeater_lang - 2"/>  
			<xsl:variable name="colorder" select="$repeater_lang - 1"/>  
			<xsl:variable name="colrelease" select="$repeater_lang + 2"/>  
									  
			<!-- selektiere alle Eintraege mit gueltigem Land -->  
			<xsl:if test="$land">			  
				<record>  
				<Name><xsl:value-of select="table:table-cell/text:p"/></Name>  
				<Referenz-Spalte><xsl:value-of select="$repeater_lang"/></Referenz-Spalte>  
				<Korrektur><xsl:value-of select="$repeater"/></Korrektur>  
				<Version><xsl:value-of select="table:table-cell[$colversion]/text:p"/></Version>  
				  
				<Sprache><xsl:value-of select="$land"/></Sprache>  
				  
				<xsl:if test="table:table-cell[$colrelease]/text:p">  
					<xsl:if test="not (table:table-cell[$colversion]/text:p = table:table-cell[$colrelease]/text:p)" >  
						<Release><xsl:value-of select="table:table-cell[$colrelease]/text:p"/></Release>  
					</xsl:if>  
				</xsl:if>  
  
				<xsl:if test="table:table-cell[$colclientid]/text:p">  
					<ClientId><xsl:value-of select="table:table-cell[$colclientid]/text:p"/></ClientId>  
				</xsl:if>  
				  
				</record>  
			</xsl:if>  
  
		</xsl:for-each>  
	</xsl:template>  
</xsl:stylesheet>