2015-04-06 178 views
1

好的,所以我一直在通过VB.Net处理一些XML数据的XSL转换。我有一切工作正常,数据保存为可读的.x​​ls文件。问题是我在尝试打开文档时收到以下内容。Xml转换为Excel xls

The file you are trying to open, 'Test_Xls.xls', is in a different format than specified by the file extension. Verify that the file is not currupted and is from a trusted source before opening the file. Do you want to open the file now?

你试图打开,“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> 

这引出了一个问题..有什么办法来产生可在Excel中可以看出,虽然XML转换的文档,而不会收到此错误信息?我无法更改注册表,也无法使用任何第三方实用程序。

+0

你试过扩展名.xml吗? – leu

+0

我已经成功地将它转换并导出为.xml文件,没有任何问题。但是,在与其他人对话后,它需要具有.xls扩展名。 – Jon

+2

“.xls”表示本机Excel '97等。您必须告诉您的输出在SpreadsheetML中。所以,请尝试“.xlsx”。 – leu

回答

1

(因为问题似乎解决了,我已经扩大了我的意见变成一个答案。)

与方法的问题简单说就是,只要我们可以看到(我们看不到任何代码,输出文件除外):您的XSLT样式表生成一个XML文档,您可以使用*.xls扩展名保存该文档。这会破坏文件,因为当解释为*.xls文件时,内容无效。

到目前为止讨论的文件扩展名:

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

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


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

为了使这更加复杂,也有“开放式办公”,其中有一系列其他的含义,所有的人都无关的微软。你可能想看看history of Office XML formats

+0

感谢您的解释:)对我来说,这是一个合适的答案,尽管它不能解决错误,但它为我解释为什么我无法修复错误提供了一些信息。 – Jon

+0

@ michael.hor257k对于Mac,2004年发布了Office版本,并将年份包含在格式名称中。对于Windows平台,它恰好是2003年。我会尝试进行编辑并使其更加清晰。不幸的是,“SpreadsheetML”可以引用格式的压缩和“单片”版本。 –

+0

@ michael.hor257k这真的很有争议,有人会争辩说SpreadsheetML是与Excel有关的OOXML的一部分。其他人说,“SpreadsheetML”是指Excel 2003 XML格式(您上面发布的链接) - 但是,[Brian Jones说SpreadsheetML有一个压缩文件结构](http://blogs.msdn.com/ b/brian_jones /存档/ 2006/11/02 /简单的SpreadsheetML文件部分-1-的-3.aspx)。但是,如果你喜欢,请添加你自己对条款的解释 - 我很高兴终于能够理解这些混乱的名字。 –