通过XSLT

时间:2018-02-01 16:18:06

标签: excel xslt xslt-1.0

我需要根据变量格式化Excel单元格的某些部分。我每次尝试都会得到一些我无法理解的胭脂空白。作为测试,我制作了一个非常简单的xsl,它没有任何真正的代码来试图理解Excel正在做什么。我仍然不知道如何避免最终结果。我删除了XSL中的空格,因为我知道这可能是WordML的问题,我试图通过CDATA封装文本,我尝试使用xsl:text并禁用转义,我尝试使用normalize -空间。最后结果总是相同的(除了标准化空间,逻辑上一个空格更短;但基本结果适用)。

我测试XSL,它可以使用任何XML运行,但实际上并没有进行转换。

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <Workbook>
        <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
            <Author>Developer</Author>
            <Created>2018-02-01T15:43:59Z</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>12345</WindowHeight>
            <WindowWidth>25200</WindowWidth>
            <WindowTopX>0</WindowTopX>
            <WindowTopY>0</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>
        </Styles>
        <Worksheet ss:Name="Sheet1">
            <Table>
                <Row>
                    <Cell>
                        <Data ss:Type="String">1 TEST</Data>
                    </Cell>
                </Row>
                <Row>
                    <Cell>
                        <ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40">
                            <Font html:Color="#000000"><![CDATA[2 ]]></Font>
                            <B>
                                <Font html:Color="#000000"><![CDATA[TEST]]></Font>
                            </B>
                        </ss:Data>
                    </Cell>
                </Row>
                <Row ss:Height="18.75"><Cell><ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40"><Font html:Color="#000000">3 </Font><Font html:Size="14" html:Color="#000000">TEST</Font></ss:Data></Cell></Row>
                <Row ss:Height="18.75">
                    <Cell>
                        <ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40">
                            <Font html:Color="#000000"><xsl:text disable-output-escaping="yes">4 </xsl:text></Font>
                            <B>
                                <Font html:Size="14" html:Color="#000000"><xsl:text disable-output-escaping="yes">TEST</xsl:text></Font>
                            </B>
                        </ss:Data>
                    </Cell>
                </Row>
                <Row ss:Height="18.75">
                    <Cell>
                        <ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40">
                            <Font html:Color="#000000"><xsl:value-of select="normalize-space('5 ')"/></Font>
                            <Font html:Size="14" html:Color="#000000"><xsl:value-of select="normalize-space('TEST')"/></Font>
                        </ss:Data>
                    </Cell>
                </Row>
                <Row ss:Height="18.75">
                    <Cell>
                        <ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40">
                            <Font html:Color="#000000">6 </Font>
                            <B>
                                <Font html:Size="14" html:Color="#000000">TEST</Font>
                            </B>
                        </ss:Data>
                    </Cell>
                </Row>

            </Table>
            <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
                <PageSetup>
                    <Header x:Margin="0.3"/>
                    <Footer x:Margin="0.3"/>
                    <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
                </PageSetup>
                <Print>
                    <ValidPrinterInfo/>
                    <HorizontalResolution>600</HorizontalResolution>
                    <VerticalResolution>600</VerticalResolution>
                </Print>
                <Selected/>
                <Panes>
                    <Pane>
                        <Number>3</Number>
                        <ActiveCol>1</ActiveCol>
                    </Pane>
                </Panes>
                <ProtectObjects>False</ProtectObjects>
                <ProtectScenarios>False</ProtectScenarios>
            </WorksheetOptions>
        </Worksheet>
    </Workbook>
</xsl:template>

这导致了  Test Result

我希望在第2行到第6行的任何元素之前没有任何空格。真正看起来很奇怪的是,当通过Visual Studio Code查看时,文件中没有空格。此间距似乎来自Font和B中的某些内容,但结构与查看直接在Excel中创建的文件时所获得的结构相同,而不是所有空格。

0 个答案:

没有答案