2016-06-16 6 views
0

Saxon-PE 9.2.0.6でXSLT 2.0を使用すると、ExcelデータシートXMLから要素 'w:gridSpan'は、シートのmergecells要素の値を使用して行2のスパンされた列の数です。誰も私にこれを行う方法の提案を与えることができますか?XSLT 2.0とSaxon-PE 9.2.0.6を使用してWord文書の 'gridSpan'要素にExcel表の列のスパン値を抽出する

入力XMLがこれです:私も示唆していたき

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

<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> 

入力XMLに関する私のXSLTの一部:

 <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> 

所望の出力次の2つの関数を使用するが、列数を取得するためにそれらを実装する方法はわからないspanneスプレッドシートの行1と2、及び提案2つのfuncsの行2例のDは、次のとおりです。

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

あなたの質問は不明です。この例で期待される結果は何ですか?それを得るために必要なロジックは何ですか? IOW、手動で行う必要がある場合は、どうすればよいですか? –

答えて

0

ないあなたは、正確なルートを決定づけることになるから、開始しようとしている場所がわからしかし:

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

あなたのために2を取得してください...

また、ここで/ここで選択すると、まっすぐテンプレートマッチではありませんなぜ私は混乱しています。

+0

実際には、私が得ようとしているのは、のスプレッドシートの列B2とF2の間にまたがる列の数です。 – randola

関連する問題