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 ) などの gem を認識していますが、Railscasts メソッドを使用して、Excel 2010 からの警告メッセージをなくす簡単な修正を行うことができることを望んでいました。

手伝ってくれてどうもありがとう!

4

2 に答える 2

8

Railscasts アプリケーションによって生成される xls ファイルは、実際には古い Excel 2003 XML 形式の XML ファイルです。

最近のバージョンの Excel には、拡張子の強化と呼ばれる機能があり、ファイル形式がファイル拡張子と一致しない場合にこの警告が生成されます。

この警告は、拡張機能の強化と呼ばれる Excel 2007 の新しいセキュリティ機能であり、開かれているファイルの内容が、ファイルを開こうとしているシェル コマンドで指定された拡張子の種類と一致することを保証します。上記の MIME タイプは .XLS 拡張子に関連付けられているため、この警告プロンプトを表示せずにファイルを開くには、ファイルが XLS (BIFF8) ファイル形式である必要があります。

この警告を回避するには、ファイル拡張子に一致する形式で Excel ファイルを生成する必要があります。上記のリンクで回避策として提案されているようにレジストリを編集することは、おそらく実際には機能しません。拡張子を xml に変更しても機能する場合があります。

代替手段として、xls のwriteexcel 、xlsx のwrite_xlsxおよび AXLSX (上記) が適切なオプションです。

于 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 は zip 形式)

ファイルの名前を .xml に変更すると機能するはずです

于 2013-08-01T07:25:14.373 に答える