2015-04-06 127 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)。但是,如果你喜歡,請添加你自己對條款的解釋 - 我很高興終於能夠理解這些混亂的名字。 –