3

このrailscastビデオをフォローしていましたが、データを Excel (またはこの件については CSV) にエクスポートするのに深刻な問題があります。

フロントエンドで次のように表示する一部のデータで will_paginate を使用しています。

sql = "select complex..."
@data = paginate_by_sql([sql],
                :per_page => params[:rows],
                :page => params[:page])

そのままで、これはうまくいくはずだと思いました:

respond_to do |format|
    format.html
    format.xls { send_data @data.to_csv(:col_sep => "\t") }
end

実際にはコンテンツによってxlsファイルが正しくダウンロードされ、すべてが台無しになり、列ごとに1行が表示され、コンテンツとして次のようなものが表示されます。

#<Product:0x00000004c83328>

PS -> レールの最新バージョンを使用

::編集::列ごとに1行とは、Excelシートとこの行にのみ1行を意味します

列 A =#<Product:0x00000004c83328>

列 B =#<Product:0x00000004c83329>

列 C = #<Product:0x00000004c8333>(30 列)

アップデート

テストのための簡単な演習を行い、すべての列を 1 つの列だけに戻します。

csv_string = CSV.generate(:col_sep => ",") do |csv|
  csv << ["row", "of", "CSV", "data"]
  csv << ["another", "row"]
end

respond_to do |format|
    format.html
    format.csv { send_data csv_string,
        :type => 'text/csv; charset=iso-8859-1; header=present',
        :disposition => "attachment; filename=records.csv" }
end

(:col_sep => ",")オプションだと思います。

結果:

エクセル出力

4

3 に答える 3

0

この宝石を使用すると、複雑なクエリを簡単にエクスポートできます。

https://github.com/stevenbarragan/julia_builder

于 2015-10-29T10:59:26.587 に答える
0

わかりました、これが私がしたことです。

レスポンダーをこれに変更しました...

respond_to do |format|
    format.xls
end

これでnameofmethod.xls.erbというテンプレートを作成しました...

<?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>
      <% @data.first.attributes.keys.each do |column| %>
        <Cell><Data ss:Type="String"><%=column%></Data></Cell>
      <% end %>
      </Row>
    <% @data.each do |row| %>
      <Row>
      <% row.attributes.values.each do |column| %>
        <Cell><Data ss:Type="String"><%= column %></Data></Cell>
      <% end %>
      </Row>
    <% end %>
    </Table>
  </Worksheet>
</Workbook>

これは、あらゆる種類の ActiveRecord オブジェクトに対して非常に動的です。今のところ、これを行う必要があります...

于 2013-06-17T11:44:16.660 に答える