Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT:将Excel文本颜色参数传递给模板_Excel_Xslt_Xslt 1.0 - Fatal编程技术网

XSLT:将Excel文本颜色参数传递给模板

XSLT:将Excel文本颜色参数传递给模板,excel,xslt,xslt-1.0,Excel,Xslt,Xslt 1.0,这件事让我完全糊涂了。我有一个多文本彩色单元格。大部分数据都是以某种方式共享的,所以我想使用模板来完成大部分工作。为此,我试图将文本颜色作为参数传递给模板。一个超级简单的例子: <xsl:variable name="textColor"> <xsl:choose> <xsl:when test="$cellColor = 's73'"> <xsl:text>#FFFFFF</xsl:text&

这件事让我完全糊涂了。我有一个多文本彩色单元格。大部分数据都是以某种方式共享的,所以我想使用模板来完成大部分工作。为此,我试图将文本颜色作为参数传递给模板。一个超级简单的例子:

<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">&amp;#10;</xsl:text>
    <!-- Bunch of stuff after this -->
    <Font html:Color="{$textColor}">
        <xsl:text>[</xsl:text>
    </Font>

#FFFFFF
#000000
&#10;
[

通常情况下,我对此没有任何问题,但当文本颜色似乎没有通过时,我感到震惊。但是,当我调试文本颜色时,我感到震惊。进一步的调查显示,创建的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>
Two-Box
]
[
前两行来自未输入detailLines模板的代码,因此它直接调用cellColor变量。最后一行来自传递该变量的模板。名称空间似乎导致了我的问题,但我无法理解1)它为什么存在,2)如何使它消失

编辑-寻址单元格颜色注释

由于多种原因,我无法将实际代码放在这里,但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>

s216
s73
s210

通常,当您想在xsl中为变量赋值时,应该使用在is中有不同颜色字母的单元格,在spreadsheetML中是这样的


tes
T

就我自己和评论员Peter Vande Weyer所能确定的范围而言,无法以我尝试的方式传递文本颜色。出现问题的原因是,此颜色格式所在的模板不是主模板,因此xslt处理程序正在应用命名空间。命名空间的此应用程序ses Excel将失败,因为处理器插入它的位置不应出现这种情况。此时唯一的解决方案是在处理此文本格式时不使用单独的模板。

如何计算$cellColor?任何xslt代码都会很有帮助。此外,您能否显示转换后的xml输出,以了解Excel无法显示此文本格式的原因颜色。您的问题一点也不清楚。首先,我们需要知道转换的结果应该是什么,以便Excel正确显示。找出(在这里说:)并将其添加到您的问题中。然后提供转换的可复制示例(包括使用的任何输入),以便我们可以修复该问题,并使其输出上述预期结果。请参阅:@Jason H我几乎可以肯定,您只使用纯xml显示在excel中,这很好,因为您不必为单元格指定样式。如果您希望以excel的颜色、粗体文本等样式为单元格设置样式,您当然需要excel中的工作簿/工作表你的xsl和单元格已经定义了样式。不,这没有什么区别。你当然可以使用
xsl:text
来输出文本。或者只输出文本。结果将完全相同。我不是电子表格ML专家,但这看起来不对。
<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>
<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>