2016-06-16 5 views
0

Mit XSLT 2.0 in Saxon-PE 9.2.0.6, muss ich aus einem Excel-Datenblatt.xml in ein Element 'w: gridSpan' die Anzahl der übergreifenden Spalten in Zeile 2 unter Verwendung der Werte aus dem Element mergecells des Arbeitsblatts. Kann mir jemand einen Vorschlag machen, wie das geht?Extrahieren Excel Spalte Spaltenspanne Wert in ein Word-Dokument 'GridSpan' Element mit XSLT 2.0 und Saxon-PE 9.2.0.6

Der Eingang XML ist dies:

<row r="2" spans="1:6" ht="33" customHeight="1"> 
     <c r="A2" s="6" t="s"> 
      <v>33</v> 
     </c> 
     <c r="B2" s="12" t="s"> 
      <v>0</v> 
     </c> 
     <c r="C2" s="13"/> 
     <c r="D2" s="13"/> 
     <c r="E2" s="13"/> 
     <c r="F2" s="13"/> 
    </row> 

    ………… 

<mergeCells count="2"> 
    <mergeCell ref="B1:F1"/> 
    <mergeCell ref="B2:F2"/> 
</mergeCells> 

Der Teil meines XSLT mit dem Eingang XML Bezug:

 <w:tc> 
      <w:tcPr> 
      <w:vAlign w:val="bottom"/> 
      <xsl:choose> 
       <xsl:when test="**e:sheetData/e:row[position() = 2]**"> 
       <xsl:element name="w:gridSpan"> 
        <xsl:attribute name="w:val"> 
        <xsl:value-of select="**dg3:get_column_span**"/> 
        </xsl:attribute> 
       </xsl:element> 
       </xsl:when> 
      </xsl:choose> 

gewünschte Ausgabe:

 <w:tc> 
      <w:tcPr> 
       <w:vAlign w:val="bottom"/> 
       <w:gridSpan w:val="1"/> 
      </w:tcPr> 

ich hatte auch vorgeschlagen haben Verwendung der folgenden zwei Funktionen, aber nicht wissen, wie sie implementiert werden, um die Anzahl der Spalten zu erhalten d in Zeile 2 Beispiel Tabelle Zeilen 1 und 2, und die vorgeschlagenen 2 funcs folgen:

A  B  C  D  E  F 
    Optimum Fixed Income Fund Class A 

    Year Ended 


    <xsl:function name="dg3:get_column_span"> 
    <xsl:param name="cell"/> 
    <xsl:choose> 
     <xsl:when test="$mergeCells[e:mergeCell[matches(@ref, concat('^',$cell/@r,':'))]]"> 
     <xsl:variable name="merge" 
      select="$mergeCells//e:mergeCell[matches(@ref, concat('^',$cell/@r,':'))]"/> 
     <xsl:value-of 
      select="dg3:get_column_number(replace($merge/@ref, '([^:]+):([^;]+)','$2')) - 
      dg3:get_column_number(replace($merge/@ref, '([^:]+):([^;]+)','$1')) + 1" 
     /> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:value-of select="1"/> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:function> 

    <xsl:function name="dg3:get_column_number"> 
    <xsl:param name="range"/> 
    <xsl:value-of 
     select="string-to-codepoints(substring($range,1,1)) - 
     string-to-codepoints('A') + 1"/> 
    </xsl:function> 
+0

Ihre Frage ist nicht klar. Was ist das erwartete Ergebnis in diesem Beispiel und welche Logik ist erforderlich, um es zu erhalten? IOW, wie würdest du das machen, wenn du es manuell machen müsstest? –

Antwort

0

nicht sicher, wo Sie versuchen, aus zu starten, die die genaue Route diktieren würde, aber:

<xsl:attribute name="w:val"> 
<xsl:value-of select="mergeCells/@count"/> 
</xsl:attribute> 

Gets that 2 for you ...

Auch ich bin verwirrt, warum Sie verwenden, wenn/hier wählen und es ist keine gerade Vorlage übereinstimmen.

+0

eigentlich, was ich versuche zu erhalten, ist die Anzahl der Spalten zwischen den Tabellenkalkulationsspalten B2 und F2 in , wenn das ein wenig verdeutlicht. – randola

Verwandte Themen