Использование 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>
Ваш вопрос непонятен. Каков ожидаемый результат в этом примере и какова логика, необходимая для его получения? IOW, как бы вы это сделали, если бы вам пришлось делать это вручную? –