XSLT中设置的#003134颜色导出Excel后变为#003366求助
解决方案:Excel中自定义RGB颜色被替换的问题
你遇到的问题根源是旧版Excel(.xls格式,基于SpreadsheetML规范)依赖内置调色板工作:当你直接指定调色板外的RGB颜色时,Excel会自动匹配调色板中最接近的颜色值,#003134不在默认调色板内,因此被替换成了最接近的#003366。
具体解决方法:
1. 自定义调色板(适配.xls格式)
在Workbook根节点下添加自定义调色板,将#003134纳入调色板后通过索引引用:
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"> <!-- 自定义调色板 --> <Colors> <!-- 定义索引0对应#003134 --> <Color> <RGB ss:Color="#003134"/> </Color> <!-- 保留默认调色板的其他基础颜色(避免影响现有样式) --> <Color><RGB ss:Color="#FFFFFF"/></Color> <Color><RGB ss:Color="#000000"/></Color> <!-- 可按需补充更多默认调色板颜色 --> </Colors> <!-- 修改样式,使用调色板索引引用颜色 --> <Styles> <Style ss:ID="s2"> <Alignment ss:Vertical="Center"/> <Font ss:FontName="Arial" ss:Size="14" ss:Color="0" ss:Bold="1"/> </Style> </Styles> <!-- 原有Worksheet内容 --> <Worksheet ss:Name="Summary"> <Row ss:AutoFitHeight="0" ss:Height="33"> <Cell ss:MergeAcross="1" ss:StyleID="s2"> <Data ss:Type="String">My Company</Data> </Cell> </Row> </Worksheet> </Workbook>
2. 切换到新版Open XML格式(.xlsx)
如果场景允许生成.xlsx文件,使用新版Office Open XML命名空间(http://schemas.openxmlformats.org/spreadsheetml/2006/main),该格式支持直接指定RGB颜色,不会触发调色板匹配:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <xsl:template match="/*"> <x:worksheet> <x:sheetData> <x:row> <x:c> <x:rPr> <x:rFont val="Arial"/> <x:sz val="14"/> <x:b/> <!-- 直接指定RGB颜色值 --> <x:rgbColor rgb="003134"/> </x:rPr> <x:t>My Company</x:t> </x:c> </x:row> </x:sheetData> </x:worksheet> </xsl:template> </xsl:stylesheet>
3. 验证XML结构完整性
确保XSLT输出的XML没有语法错误、命名空间正确——残缺或格式错误的XML会被Excel自动修正,可能导致样式被篡改。
内容的提问来源于stack exchange,提问作者Nagaraj Uppar
相关产品推荐
相关产品推荐

