这个让我完全困惑。我有一个多文本彩色单元格。大多数数据都是以这样或那样的方式共享的,所以我想使用模板来完成大部分工作。为此,我试图将文本颜色作为参数传递给模板。一个非常简单的例子:
<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)如何让它消失。
EDIT-寻址单元格颜色注释
由于多种原因,我无法将实际代码放在这里,但cellColor变量是在textColor之前计算的。它被编辑得最多的是:
<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>
在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>
根据我自己和评论者Peter Vande Weyer的决定,没有办法以我尝试的方式传递文本颜色。出现此问题的原因是此颜色格式所在的模板不是主模板,因此xslt处理器正在应用命名空间。命名空间的此应用程序导致Excel失败,因为它不应位于处理器插入它的位置。此时唯一的解决方案是在处理此文本格式时不使用单独的模板。
通常,当您想在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中消失,你可以直接删除它。