Excel не отображает текст, когда html: цвет применяется через XSLT - PullRequest
0 голосов
/ 12 декабря 2018

Много лун назад я задал (и ответил) вопрос о передаче цветов текста в качестве параметра шаблона в XSLT для Excel (см .: Передача параметра цвета текста Excel в шаблоны ), и сначала я подумалэто было связано с тем, что у меня была часть данных в шаблоне, но так как цвет текста был жестко запрограммирован, на этот раз он не играл.Просто чтобы быть уверенным, сделали супер упрощенный контрольный пример.Может быть, я просто слишком устал, чтобы увидеть простое решение.

У меня есть ячейка с двумя наборами текста.Если переменная проверки прошла, то я хочу написать вторую часть текста красным, оставив первую часть всегда белым.

Ниже приведен мой упрощенный тестовый пример XSLT.В этой настройке я ожидаю увидеть «Période Du 01-01-2019 Au 31-01-2019» в белом тексте и «Aucun Mois Fiscal Sé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>

1 Ответ

0 голосов
/ 12 декабря 2018

На связанный вопрос на самом деле есть ответ (ответ Питера Ванде Вейера показывает правильный формат)

Ваша проблема с этим элементом

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

Обратите внимание, вы увидите, что у вас все еще есть проблема, когда он не показывает разрыв строки, но вам, возможно, придется задать еще один вопрос для этогоесли вы не можете решить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...