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

我想设置一些标签的背景颜色。 CSS背景颜色或属性bgcolor都不起作用。

有一个MSO CSS,会给我背景颜色?

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

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

如果有人关心,完整的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> 

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

像这样的东西:

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

Excel似乎无法处理多个class属性值, 似乎也无法将CSSselect器应用于组合类值。

如果将CSSselect器应用于仅具有一个类属性值的元素的单个类属性, background-color将在Excel中工作。

看看这个例子在Excel中的HTML文件,看看我的意思是:

 <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>