许多月前,我问(并回答了)一个有关在XSLT for Excel中将文本颜色作为模板参数传递的问题(请参阅:Passing Excel text color parameter to templates) 起初我以为这是相关的,因为我在模板中有“数据”部分,但是由于这次文本颜色是硬编码的,所以没有用。只是要确保做一个超级简单的测试用例。也许我太累了,看不到简单的解决方案。
我有一个包含两组文本的单元格。如果检查变量通过,那么我想将文本的第二部分写成红色,而将第一部分始终写成白色。
下面是我简单的XSLT测试用例。我希望在此设置中看到白色文本为“PériodeDu 01-01-2019 Au 31-01-2019”,红色文本为“ Aucun Mois FiscalSélectionné”。如果法语因任何原因困扰您,只需将英语变量切换为Y(喜欢编写双语报告!)。
令我更加恼火的是,在SpreadsheetML中,我看到了所需的结果,但是它并没有显示在Excel本身中。而是Excel只是显示一个空白单元格。
XSLT测试用例:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0" xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
<xsl:output encoding="UTF-8" method="xml" indent="no"/>
<xsl:variable name="english" select="'N'"/>
<xsl:variable name="selectedDates" select="'N'"/>
<xsl:variable name="reportPeriodStart" select="'01-01-2019'"/>
<xsl:variable name="reportPeriodEnd" select="'31-01-2019'"/>
<xsl:template match="/">
<Workbook>
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>Developer</Author>
<Created>2018-12-11T17:43:39Z</Created>
<Version>16.00</Version>
</DocumentProperties>
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
<AllowPNG/>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>8712</WindowHeight>
<WindowWidth>23040</WindowWidth>
<WindowTopX>32767</WindowTopX>
<WindowTopY>32767</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
<Borders/>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s43">
<Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
<Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#FFFFFF" ss:Bold="1"/>
<Interior ss:Color="#005C96" ss:Pattern="Solid"/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<Table>
<Column ss:AutoFitWidth="0" ss:Width="500"/>
<Row>
<Cell ss:StyleID="s43">
<Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40">
<B>
<Font html:Color="FFFFFF">
<xsl:choose>
<xsl:when test="$english = 'Y'">
<xsl:value-of select="concat('Period of ', $reportPeriodStart, ' To ', $reportPeriodEnd)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('Période Du ', $reportPeriodStart, ' Au ', $reportPeriodEnd)"/>
</xsl:otherwise>
</xsl:choose>
</Font>
<xsl:if test="$selectedDates = 'N'">
<Font html:Color="FF0000">
<xsl:choose>
<xsl:when test="$english = 'Y'"> No Fiscal Month Selected</xsl:when>
<xsl:otherwise> Aucun Mois Fiscal Sélectionné</xsl:otherwise>
</xsl:choose>
</Font>
</xsl:if>
</B>
</Data>
</Cell>
</Row>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Layout x:Orientation="Landscape"/>
<PageMargins x:Bottom="0.5" x:Left="0.25" x:Right="0.25" x:Top="0.5"/>
</PageSetup>
<FitToPage/>
<Print>
<FitHeight>0</FitHeight>
<ValidPrinterInfo/>
<Scale>89</Scale>
<HorizontalResolution>600</HorizontalResolution>
<VerticalResolution>600</VerticalResolution>
</Print>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
链接的问题实际上对此有答案(彼得·范德·韦尔的答案显示了正确的格式)
您的问题在于此元素
<Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40">
通过在此处使用默认的名称空间声明,您还将Data
元素放入该名称空间。 Data
必须位于urn:schemas-microsoft-com:office:spreadsheet
命名空间中。由于已经绑定到前缀ss
,因此您只需要这样声明:
<ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40">
此外,字体颜色需要带有#
前缀...
<Font html:Color="#FFFFFF">
所以,您的表格元素应该看起来像这样
<Table>
<Column ss:AutoFitWidth="0" ss:Width="500"/>
<Row>
<Cell ss:StyleID="s43">
<ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40">
<B>
<Font html:Color="#FFFFFF">
<xsl:choose>
<xsl:when test="$english = 'Y'">
<xsl:value-of select="concat('Period of ', $reportPeriodStart, ' To ', $reportPeriodEnd)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('Période Du ', $reportPeriodStart, ' Au ', $reportPeriodEnd)"/>
</xsl:otherwise>
</xsl:choose>
</Font>
<xsl:if test="$selectedDates = 'N'">
<Font html:Color="#FF0000">
<xsl:choose>
<xsl:when test="$english = 'Y'"> No Fiscal Month Selected</xsl:when>
<xsl:otherwise> Aucun Mois Fiscal Sélectionné</xsl:otherwise>
</xsl:choose>
</Font>
</xsl:if>
</B>
</ss:Data>
</Cell>
</Row>
</Table>
请注意,您仍然会看到它没有显示换行符的问题,但是如果无法解决,您可能需要问另一个问题