【问题标题】:Xml transform as Excel xlsXml 转换为 Excel xls
【发布时间】:2015-04-06 19:49:27
【问题描述】:

好的,我一直致力于通过 VB.Net 对一些 XML 数据进行 XSL 转换。我一切正常,数据保存为可读的 .xls 文件。问题是当我尝试打开文档时收到以下信息。

您尝试打开的文件“Test_Xls.xls”位于不同的 格式比文件扩展名指定的格式。验证文件是 未损坏并且在打开文件之前来自受信任的来源。做 你想现在打开文件吗?

我一直在做一些阅读,但我无法提出任何解决问题的方法。我已经在 Notepad++ 中获取了 .xls 文件,并在仍然产生错误的同时剥离了它的所有内容。我将其作为转换的输出:

<?xml version="1.0" encoding="utf-8"?>
<Workbook 
    xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:user="urn:my-scripts" 
    xmlns:o="urn:schemas-microsoft-com:office:office" 
    xmlns:x="urn:schemas-microsoft-com:office:excel" 
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">

    <Worksheet ss:Name="Testing Data">
        <Table>
            <Row>
                <Cell>
                    <Data ss:Type="String">Tests</Data>
                </Cell>
            </Row>
            <Row>
                <Cell>
                    <Data ss:Type="Number">1</Data>
                </Cell>
            </Row>
        </Table>
    </Worksheet>

</Workbook>

这引出了问题.. 有没有办法通过 Xml 转换生成可以在 Excel 中看到的文档而不会收到此错误消息?我无法更改注册表,也无法使用任何第 3 方实用程序。

【问题讨论】:

  • 你试过扩展 .xml 了吗?
  • 我已经成功地将其转换并导出为 .xml 文件,没有任何问题。但是,在与其他人交谈后,它需要具有 .xls 扩展名。
  • ".xls" 表示本机 Excel '97 等。您必须说明您的输出在 SpreadsheetML 中。所以,试试“.xlsx”。
  • .xls 是二进制格式(我相信是 BIFF8 格式),所以如果您有一个扩展名为 .xls 的文件,Excel 希望它采用这种格式,而不是 XML文件。您实际使用的是“SpeadsheetML”。尝试使用顶部的处理指令&lt;?mso-application progid="Excel.Sheet"?&gt; 输出您的 XML。 (见msdn.microsoft.com/en-us/library/bb226687(v=office.11).aspx
  • 尝试将格式更改为“Excel 2004 XML 电子表格”(扩展名:*.xml)。 XSLT 样式表转换为 XML,这是唯一真正是 XML 的 Excel 格式。 *.xlsx 是一种压缩的 XML 格式,我相信它在这里没有用。

标签: xml vb.net excel xslt openxml


【解决方案1】:

(由于问题似乎已经解决,我已将我的评论扩展为答案。)

就我们所见(我们看不到任何代码,除了输出文件)而言,您的方法的问题很简单:您的 XSLT 样式表生成一个 XML 文档,您可以使用 *.xls 扩展名保存该文档。这会损坏文件,因为在解释为 *.xls 文件时内容无效。

目前讨论的文件扩展名:

  • *.xsl:一种二进制格式,旧版本的 Excel 默认在其中存储工作表。 不是 XML。
  • *.xslx:新版 Excel 使用的格式。在内部,它是一个包含多个 XML 组件的压缩文件。
  • *.xml:在这种特定情况下,所谓的“Excel 2004 XML 电子表格”(对于 Mac;在 Windows 上为“Excel 2003 XML 电子表格”)格式,它将文档存储为普通的解压缩 XML。顺便说一句,其他 Office 产品也知道 *.xml 格式,例如办公字)

将转换后的文档保存为 *.xml 可以让 Excel 清楚地知道内容既不是旧的二进制格式,也不是压缩的 XML 标准。


更多细节:令人困惑的是,Microsoft Office 调色板的压缩 XML 格式集称为“Office Open XML”(“OOXML”,ECMA-376)。纯 XML 格式有时称为“Microsoft Office XML”格式。较新版本 Excel 的具体格式为"SpreadsheetML"

为了让这个更复杂,还有“Open Office”,它有一系列其他含义,都与微软无关。

也许您想看看history of Office XML formats

【讨论】:

  • 感谢您的解释 :) 这对我来说是一个合适的答案,因为即使它没有修复错误,它也阐明了为什么我实际上无法修复错误。
  • @michael.hor257k 对于 Mac,2004 年发布了 Office 版本,格式名称中包含年份。对于 Windows 平台,它恰好是 2003 年。我将尝试编辑并使其更清晰。不幸的是,“SpreadsheetML”既可以指压缩版本,也可以指“单片”格式。
  • @michael.hor257k 这确实有争议,有些人会争辩说,SpreadsheetML 是与 Excel 相关的 OOXML 的一部分。其他人说“SpreadsheetML”指的是 Excel 2003 XML 格式(您在上面发布的链接) - 但话说回来,Brian Jones says that SpreadsheetML has a zipped file structure。但是,如果您愿意,请添加您自己对这些术语的解释 - 我很高兴最终能理解这些乱七八糟的名称。
猜你喜欢
  • 2012-06-27
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2014-01-05
  • 2011-01-09
  • 2010-11-16
相关资源
最近更新 更多