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