Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.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
使用xsl为excel生成html需要更多格式_Html_Css_Xml_Excel_Xslt - Fatal编程技术网

使用xsl为excel生成html需要更多格式

使用xsl为excel生成html需要更多格式,html,css,xml,excel,xslt,Html,Css,Xml,Excel,Xslt,我想为一些标签设置背景色。CSS背景色和属性bgcolor似乎都不起作用 有一个mso-CSS会给我背景颜色吗 Perl,仅XSL,没有Microsoft产品。它应该适用于OSX和Windows以及当前版本的Excel xml: <d>Y</d> html: <td class="Status Y" bgcolor="yellow">Y</td> css: .Status.Y { background-color: yellow; } xml:

我想为一些标签设置背景色。CSS背景色和属性bgcolor似乎都不起作用

有一个mso-CSS会给我背景颜色吗

Perl,仅XSL,没有Microsoft产品。它应该适用于OSX和Windows以及当前版本的Excel

xml: <d>Y</d>
html: <td class="Status Y" bgcolor="yellow">Y</td> 
css: .Status.Y { background-color: yellow; }
xml:Y
html:Y
css:.Status.Y{背景颜色:黄色;}
如果有人关心的话,完整的xsl是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" 
        encoding="UTF-8"
        indent="yes"
        omit-xml-declaration="yes"
    />
    <xsl:template match="project">
        <html>
            <head>
                <title>
                    <xsl:text>pqs - </xsl:text>
                    <xsl:value-of select="table[@id='Head']/caption/row[1]/d[1]"/>
                </title>
                <style type="text/css">
                table,th,td {
                    border-width: thin;
                    border-style: outset;
                    border-color: gray;
                    border-collapse: collapse;
                    background-color: white;
                    mso-width-source:auto;
                }
                th,td {
                    padding: 0 1em 0 1em;
                    border-style: inset;
                }
                .Status { text-align: center; }
                .Status.G { background-color: #0F0; }
                .Status.R { background-color: red; }
                .Status.Y { background-color: yellow; }
                .Status.I { background-color: #6F00FF; }
                </style>
            </head>
            <body>
                <xsl:apply-templates select="node()"/>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="table|caption">
        <xsl:if test="@id">
            <h1><xsl:value-of select="@id"/></h1>
        </xsl:if>
        <xsl:apply-templates select="caption"/>
        <xsl:if test="count(row)&gt;0" >
            <table id="{@id}" class="{local-name(.)}">
                <xsl:apply-templates select="row"/>
            </table>
        </xsl:if>
    </xsl:template>
    <xsl:template match="row">
        <tr><xsl:apply-templates select="node()"/></tr>
    </xsl:template>
    <xsl:template match="h">
        <th><xsl:value-of select="@name"/></th>
    </xsl:template>
    <xsl:template match="d">
        <td>
            <xsl:variable name="text" select="text()"/>
            <xsl:variable name="p" select="position()"/>
            <xsl:variable name="class" select="../../row[1]/h[$p]/@name"/>
            <xsl:choose>
                <xsl:when test="$class='Status'">
                    <xsl:attribute name="class">
                        <xsl:value-of select="concat($class,' ',$text)"/>
                    </xsl:attribute>
                    <xsl:attribute name="bgcolor">
                        <xsl:choose>
                            <xsl:when test="$text='G'"><xsl:value-of select="'green'"/></xsl:when>
                            <xsl:when test="$text='R'"><xsl:value-of select="'red'"/></xsl:when>
                            <xsl:when test="$text='Y'"><xsl:value-of select="'yellow'"/></xsl:when>
                            <xsl:when test="$text='I'"><xsl:value-of select="'#6F00FF'"/></xsl:when>
                            <xsl:otherwise><xsl:value-of select="white"/></xsl:otherwise>
                        </xsl:choose>
                    </xsl:attribute>
                </xsl:when>
            </xsl:choose>
            <xsl:value-of select="text()"/>
        </td>
    </xsl:template>
</xsl:stylesheet>

pqs-
表,th,td{
边界宽度:薄;
边界样式:开始;
边框颜色:灰色;
边界塌陷:塌陷;
背景色:白色;
mso宽度来源:自动;
}
th,td{
填充:0 1em 0 1em;
边框样式:插图;
}
.状态{文本对齐:居中;}
.Status.G{背景色:#0F0;}
.Status.R{背景色:红色;}
.Status.Y{背景颜色:黄色;}
.Status.I{背景色:#6F00FF;}

您可能需要使用单值类属性并相应地调整CSS

大概是这样的:

html: <td class="StatusY" bgcolor="yellow">Y</td> 
css: .StatusY { background-color: yellow; }

张贴你认为不起作用的代码。在哪里查看此XML?浏览器?转换是什么样子的?没有查看xml。它被转换成html以在excel中使用。你一针见血!谢谢很容易忘记,微软最初是用一个类实现CSS的。这是有道理的。
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
    <head>
        <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
        <meta name="ProgId content=Excel.Sheet">
        <meta name="Generator" content="Microsoft Excel 10">
        <style>
            <!--
table{ border:1px solid black;}
td{ border:1px solid black;}
.Y {background-color:#0000FF;}
.Status{background-color:#00FF00;}
.Status.Y {background-color:#FF0000;}
.StatusY {background-color:#CCCCCC;}
-->
        </style>
    </head>
    <body>
        <table>
            <tr>
                <td  class="Y">class="Y"</td>
            </tr>
            <tr>
                <td  class="Status">class="Status"</td>
            </tr>
            <tr>
                <td class="Status Y" >class="Status Y"</td>
            </tr>
            <tr>
                <td class="StatusY" >class="StatusY"</td>
            </tr>
            <tr>
                <td>no class</td>
            </tr>
        </table>
    </body>
</html>