2016-06-16 1 views
0

Использование XSLT 2.0 в Saxon-PE 9.2.0.6, мне нужно извлечь из листа данных Excel.xml в элемент 'w: gridSpan' - количество развернутых столбцов в строке 2, используя значения из элемента слияния листа. Может ли кто-нибудь дать мне предложение о том, как это сделать?Извлечение значения столбца столбца таблицы Excel в элемент doc «gridSpan» Word с использованием XSLT 2.0 и Saxon-PE 9.2.0.6

Входной XML заключается в следующем:

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

Часть моего XSLT, относящиеся к входному XML:

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

Желаемый результат:

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

Я также предложил использование следующих двух функций, но не знаю, как реализовать их для получения числа столбцов spanne d в строке 2 примера электронных таблиц строк 1 и 2, а также предложенный 2 funcs следует:

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