2013-07-31 29 views
3

當使用Ryan Bates的Railscasts第362集關於導出到Excel的示例應用程序(https://github.com/railscasts/362-exporting-csv-and-excel)時,我注意到Excel 2010(在Windows上)在打開.xls文件時給我一個警告消息,已經使用「下載爲Excel」鏈接下載。Railscasts第362集 - 導出到Excel:如何避免Excel 2010在打開文件時給出的警告信息?

警告內容:

「你試圖打開該文件...是不是由文件擴展名指定不同的格式驗證該文件沒有損壞,距離開幕前一個值得信賴的來源。文件,你現在想打開文件嗎?「

當我點擊'是'時,我可以打開文件。在使用Excel 2011(在Mac上)時,我甚至不會收到警告消息。但我希望能夠提供一個Excel文件,當用戶從我的網站下載這樣的文件時不會提示該警告。

注意:我也嘗試將應用程序中的所有引用從.xls替換爲.xlsx,但隨後Excel根本無法打開該文件。它抱怨說:「Excel無法打開此文件,文件格式或文件擴展名無效,請確認文件沒有損壞,並且文件擴展名與文件格式相匹配。」

我知道的寶石如AXLSX(https://github.com/randym/axlsx),但希望我可以只使用Railscasts方法,並速戰速決,從Excel 2010中消除警告消息

非常感謝你爲你的幫幫我!

回答

7

由Railscasts應用程序生成的xls文件實際上是一箇舊的Excel 2003 XML格式的XML文件。

最新版本的Excel有一個功能叫做Extension Hardening產生此警告當文件格式不文件的擴展名匹配:

警報是在Excel 2007中的新安全功能被叫分機硬化,這確保打開的文件內容與試圖打開文件的shell命令中指定的擴展類型相匹配。由於上面列出的MIME類型與.XLS擴展名相關聯,因此文件必須處於XLS(BIFF8)文件格式才能在沒有此警告提示的情況下打開。

爲了避免此警告,您必須生成一個格式與文件擴展名匹配的Excel文件。按照建議的上述鏈接中的解決方法編輯註冊表可能在實踐中不可行。將擴展名更改爲xml也可能起作用。

作爲xls的備選writeexcel,xlsx和AXLSX的write_xlsx(您在上面提到)是很好的選擇。

2

實際上,代碼生成的:

<?xml version="1.0"?> 
<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"> 
    <Worksheet ss:Name="Sheet1"> 
    <Table> 
     <Row> 
     <Cell><Data ss:Type="String">ID</Data></Cell> 
     <Cell><Data ss:Type="String">Name</Data></Cell> 
     <Cell><Data ss:Type="String">Release Date</Data></Cell> 
     <Cell><Data ss:Type="String">Price</Data></Cell> 
     </Row> 
    <% @products.each do |product| %> 
     <Row> 
     <Cell><Data ss:Type="Number"><%= product.id %></Data></Cell> 
     <Cell><Data ss:Type="String"><%= product.name %></Data></Cell> 
     <Cell><Data ss:Type="String"><%= product.released_on %></Data></Cell> 
     <Cell><Data ss:Type="Number"><%= product.price %></Data></Cell> 
     </Row> 
    <% end %> 
    </Table> 
    </Worksheet> 
</Workbook> 

是XML(XLS是二進制格式,XLST以壓縮格式)

重命名文件爲.xml應該工作