0

我使用 .Net 框架的 XslCompiledTransform 类作为 XSLT 处理器(换句话说,Xslt 1.0)。

我的要求是我想使用 XSLT 1.0 和 .Net [4.0] 将 XML 文件转换为 Excel 文件(xls 文件)。

为简单起见,因为这只是测试代码,我只是考虑对我的 Xsl 文件进行一些简单的硬编码。

具体来说,我的两个问题是:

  1. 我已经尝试了很多东西,但是我看不到我的 Excel 工作表的工作表被命名为“wAbc”,这就是我想要命名的。我将工作表名称视为我的文件名。也不会生成其他工作表。下面是我的 XSL 文件
  2. 此外,由于这是测试代码,除非我使用 HTML tags ,否则我看不到不同行上输出的数据。我看到的是:AbcNext line而不是

    美国广播公司下线

那么我做错了什么?提前感谢您的时间和帮助。

我将文件响应的内容类型设置为

application/vnd.ms-excel

这是我的测试 Xsl 文件:

<?xml version="1.0"?>
    <xsl:stylesheet version="1.0"
        xmlns="urn:schemas-microsoft-com:office:spreadsheet"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt"
        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:template match="/">
        <xsl:processing-instruction name="mso-application">progid='Excel.Sheet'</xsl:processing-instruction>
        <Workbook>
            <Worksheet ss:Name="wAbc">
              <Table ss:ExpandedColumnCount="2" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="15">
                <Column ss:AutoFitWidth="20" ss:AutoWidth="65"></Column>
                <Row>
                  <Cell>
                    <Data ss:Type="String">Abc</Data>
                  </Cell>
                </Row>
                <Row>
                  <Cell>
                    <Data ss:Type="String">Next line</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>
              </WorksheetOptions>
            </Worksheet>
        </Workbook>
      </xsl:template>
    </xsl:stylesheet>
4

2 回答 2

1

您在这里使用 Excel XML 作为格式(因此,严格来说不是 XLS 文件,它是二进制文件)。

但无论如何,我可以看到您当前输出的 Excel XML 存在两个问题。首先,我认为Column元素上的ss:AutoFitWidth属性需要设置为 1(或 0)。我认为 20 不是有效值。

有关可能值的列表,请参阅http://msdn.microsoft.com/en-us/library/aa140066(v=office.10).aspx 。

另外,我认为您可能(尽管我对此不是 100% 确定)需要在Table元素上设置ss:ExpandedRowCount以及ss:ExpandedColumnCount

查看更改其中一项或两项是否可以修复您的错误。

于 2012-04-26T10:07:04.783 回答
0

ExcelXLS文件使用 Microsoft 专有的二进制格式 - 无法使用 XSLT 生成该格式。

(相对)新XSLX格式是一组压缩在一起的 XML 文件,因此原则上您可以使用 XSLT 生成这些文件,然后压缩它们以生成最终文件 - 仍然不是很容易。要查看这些文件,只需解压缩XSLX文件即可。

我建议您生成一种更简单的格式——CSV 或中间 XML——然后将其导入 Excel。

于 2012-04-26T07:16:15.447 回答