这个让我完全糊涂了。我有一个多文本颜色单元格。大多数数据以这种或那种方式共享,因此我想使用模板来完成大部分工作。为此,我试图将文本颜色作为参数传递给模板。一个非常简单的例子:
<xsl:variable name="textColor">
<xsl:choose>
<xsl:when test="$cellColor = 's73'">
<xsl:text>#FFFFFF</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>#000000</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="detailLines">
<xsl:with-param name="textColor" select="$textColor"/>
</xsl:call-template>
<xsl:template name="detailLines">
<xsl:param name="textColor"/>
<!-- Start new line -->
<xsl:text disable-output-escaping="yes">&#10;</xsl:text>
<!-- Bunch of stuff after this -->
<Font html:Color="{$textColor}">
<xsl:text>[</xsl:text>
</Font>
通常我没有任何问题,但是当文本颜色似乎没有通过时,我感到很沮丧。但是,当我调试文本颜色正在传递。进一步调查表明,创建的XML也有文本颜色,但Excel不显示它,而是默认为黑色。
我在他们通常的位置有Excel名称空间,甚至试图移动它们也没有帮助解决问题。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
<xsl:output method="xml" encoding="UTF-8"/>
任何想法都会很棒!我没有像这样的问题,变量按预期运行,但Excel不是。
编辑添加其他信息:
我发现了一个区别,但我不确定如何解释它。
<Font html:Color="#FFFFFF">Two Box</Font>
<Font html:Color="#FFFFFF">]</Font>
<Font html:Color="#FFFFFF" xmlns="urn:schemas-microsoft-com:office:spreadsheet">[</Font>
前两行来自不进入detailLines模板的代码,因此它直接调用cellColor变量。最后一行来自传递变量的模板。命名空间似乎导致我的问题,但我无法理解1)为什么它存在,2)如何让它消失。
编辑 - 解决cellColor评论
由于多种原因,我无法在此处输入实际代码,但是在textColor之前计算了cellColor变量。最重要的是:
<xsl:variable name="cellColor">
<xsl:choose>
<xsl:when test="A">
<xsl:text>s216</xsl:text>
</xsl:when>
<xsl:when test="B'">
<xsl:text>s73</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>s210</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
答案 0 :(得分:1)
具有不同颜色字母的单元格在spreadsheetML
中看起来像这样 <Cell>
<ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40">
<Font html:Color="#000000">tes</Font>
<Font html:Color="#9BC2E6">t</Font>
</ss:Data>
</Cell>
答案 1 :(得分:1)
就我自己以及评论者Peter Vande Weyer所能确定的那样,我无法以我正在尝试的方式传递文本颜色。出现此问题的原因是此颜色格式所在的模板不是主模板,因此xslt处理器正在应用命名空间。命名空间的此应用程序导致Excel失败,因为在处理器插入它的位置不期望它。此时唯一的解决方案是在处理此文本格式时不使用单独的模板。
答案 2 :(得分:0)
通常,当您想要为xsl中的变量赋值时,您应该使用<xsl:value-of select=
将cellColor变量赋值更改为:
<xsl:variable name="cellColor">
<xsl:choose>
<xsl:when test="A">
<xsl:value-of select="'s216'"/>
</xsl:when>
<xsl:when test="B'">
<xsl:value-of select="'s216'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'s210'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
和textColor变量:
<xsl:variable name="textColor">
<xsl:choose>
<xsl:when test="$cellColor = 's73'">
<xsl:value-of select="'#FFFFFF'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'#000000'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
关于如何使xmlns消失,你可以删除它。