Ruby on rails Railscasts第362集-导出到Excel:如何避免Excel 2010在打开文件时发出警告消息?

Ruby on rails Railscasts第362集-导出到Excel:如何避免Excel 2010在打开文件时发出警告消息?,ruby-on-rails,ruby,excel,xls,railscasts,Ruby On Rails,Ruby,Excel,Xls,Railscasts,当使用Ryan Bates的Railscasts第362集中关于导出到Excel()的示例应用程序时,我注意到Excel 2010(在Windows上)在打开使用“下载为Excel”链接下载的.xls文件时向我发出警告消息 警告如下: “您试图打开的文件…的格式与文件扩展名指定的格式不同。请在打开该文件之前,确认该文件未损坏且来源可靠。是否立即打开该文件?” 当我单击“是”时,我可以很好地打开该文件。当使用Excel 2011(在Mac上)时,我甚至没有收到警告消息。但是我希望能够提供一个Exc

当使用Ryan Bates的Railscasts第362集中关于导出到Excel()的示例应用程序时,我注意到Excel 2010(在Windows上)在打开使用“下载为Excel”链接下载的.xls文件时向我发出警告消息

警告如下:

“您试图打开的文件…的格式与文件扩展名指定的格式不同。请在打开该文件之前,确认该文件未损坏且来源可靠。是否立即打开该文件?”

当我单击“是”时,我可以很好地打开该文件。当使用Excel 2011(在Mac上)时,我甚至没有收到警告消息。但是我希望能够提供一个Excel文件,当用户从我的站点下载这样的文件时,它不会提示警告

注意:我还尝试将应用程序中的所有引用从.xls替换为.xlsx,但是Excel根本无法打开该文件。它抱怨:“Excel无法打开此文件。文件格式或文件扩展名无效。请验证文件是否已损坏,以及文件扩展名是否与文件格式匹配。”

我知道诸如AXLSX()之类的gems,但我希望我可以使用Railscasts方法,并快速修复以消除Excel2010中的警告消息


非常感谢你的帮助

Railscasts应用程序生成的xls文件实际上是一个旧Excel 2003 XML格式的XML文件

最新版本的Excel具有一个名为的功能,该功能在文件格式与文件扩展名不匹配时生成此警告:

此警报是Excel 2007中名为扩展名强化的新安全功能,可确保打开的文件内容与尝试打开文件的shell命令中指定的扩展名类型相匹配。因为上面列出的MIME类型与.XLS扩展名关联,所以文件必须是XLS(BIFF8)文件格式,才能在没有此警告提示的情况下打开

为了避免此警告,您必须以与文件扩展名匹配的格式生成Excel文件。按照上面链接中建议的方法编辑注册表在实践中可能不可行。将扩展更改为xml也可能有效


作为xls的替代方案,对于xlsx和AXLSX(您在上面提到的)是很好的选择。

事实上,代码生成:

<?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应该可以工作