6

当使用 Ryan Bates 的 Railscasts Episode #362 关于导出到 Excel ( https://github.com/railscasts/362-exporting-csv-and-excel ) 中的示例应用程序时,我注意到 Excel 2010 ( Windows)在打开我使用“下载为 Excel”链接下载的 .xls 文件时给我一条警告消息。

警告内容如下:

“您尝试打开的文件...与文件扩展名指定的格式不同。请在打开文件之前验证文件没有损坏并且来自受信任的来源。您要现在打开文件吗? "

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

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

我知道诸如 AXLSX ( https://github.com/randym/axlsx ) 之类的宝石,但希望我可以使用 Railscasts 方法并快速修复以消除 Excel 2010 中的警告消息。

非常感谢你的帮助!

4

2 回答 2

8

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

最新版本的 Excel 具有称为扩展强化的功能,当文件格式与文件扩展名不匹配时会生成此警告:

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

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

作为xls 的替代writeexcel ,xlsx 和AXLSX的 write_xlsx(您在上面提到的)是不错的选择。

于 2013-07-31T20:32:08.153 回答
1

事实上,生成的代码:

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

于 2013-08-01T07:25:14.373 回答