我正在尝试将大量数据导出到excel 我需要有可能将不同工作表之间的数据分开 我不喜欢依赖this之类的包,所以我想到了XSLT。
有谁知道如何使用XSLT创建工作表?
答案 0 :(得分:2)
可以使用XSLT,但您必须以Microsoft Excel XML格式输出数据,从Microsoft Excel 2002版本开始支持。
Microsoft XML Spreadsheet Reference
您还可以在维基百科上找到有用的示例
XSLT的编码方式通常取决于您希望转换的XML的结构。这是一个非常简单的示例,它转换为一个工作表:
<data>
<row>
<cell>1.1</cell><cell>12</cell>
</row>
<row>
<cell>2.1</cell><cell>2.2</cell>
</row>
</data>
然后,使用以下XSLT将其转换为Excel XML
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<xsl:template match="/data">
<xsl:processing-instruction name="mso-application">
<xsl:text>progid="Excel.Sheet"</xsl:text>
</xsl:processing-instruction>
<Workbook
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">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>Bob</Author>
<Created>2001-01-01T12:00:00Z</Created>
<Version>1.0</Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>8835</WindowHeight>
<WindowWidth>11340</WindowWidth>
<WindowTopX>480</WindowTopX>
<WindowTopY>120</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"/>
<Interior/>
<NumberFormat ss:Format="#,##0.00"/>
<Protection/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<ss:Table x:FullColumns="1" x:FullRows="1">
<xsl:attribute name="ss:ExpandedColumnCount">
<xsl:value-of select="count(row[1]/cell)"/>
</xsl:attribute>
<xsl:attribute name="ss:ExpandedRowCount">
<xsl:value-of select="count(row)"/>
</xsl:attribute>
<xsl:apply-templates select="row"/>
</ss: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/>
<PaperSizeIndex>9</PaperSizeIndex>
<HorizontalResolution>600</HorizontalResolution>
<VerticalResolution>0</VerticalResolution>
</Print>
<Selected/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
</xsl:template>
<xsl:template match="row" xmlns="urn:schemas-microsoft-com:office:spreadsheet">
<Row>
<xsl:apply-templates select="cell"/>
</Row>
</xsl:template>
<xsl:template match="cell" xmlns="urn:schemas-microsoft-com:office:spreadsheet">
<Cell>
<Data>
<xsl:choose>
<xsl:when test="number(.) =.">
<xsl:attribute name="ss:Type">Number</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="ss:Type">String</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="."/>
</Data>
</Cell>
</xsl:template>
</xsl:stylesheet>
虽然此示例仅创建一个工作表,但您应该能够看到创建多个工作表的直接性。只需为您需要的文档中的每个工作表输出另一个工作表元素。
在Microsoft Excel中手动创建电子表格,然后另存为 Mircosoft Excel XML格式,然后在记事本中查看它以查看它创建的XML可能很有用。这对于了解它如何处理格式化或列宽等非常有用。