2010-07-17 67 views
1

我想为某些标记设置背景颜色。 CSS背景色或属性bgcolor似乎都不起作用。使用xsl为excel生成html需要更多格式化

是否有一个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> 
+1

邮你认为不是代码是工作。这个XML在哪里被查看?浏览器?这个转换是什么样的? – Pointy 2010-07-17 17:30:43

+0

xml未被查看。它被转换为html用于excel。 – 2010-07-17 18:09:07

回答

2

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

事情是这样的:

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

Excel不出现能够处理多个class属性值,并且不似乎要能应用CSS选择复合类值。

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

看看在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> 
+0

你击中了头部! 谢谢! 很容易忘记,微软首次实现了一个类的CSS。这很不合理。 – 2010-07-18 00:13:47