0

RailsからCSVエクスポートするためにこのRailscastsリンクをたどって、(動的に生成された)htmlテーブルをxlsにエクスポートし、.xlsを実行するとExcelドキュメントをダウンロードします。

ただし、iWork Numbersで開くと、次のエラーが発生します。

インポートの警告-これはタブ区切りのドキュメントであり、有効なExcelドキュメントではありません。データは異なって見える場合があります。

ドキュメントにテーブルのソースコードがあります。

テーブルを生成するために使用するコードは次のとおりです。

<table border ="1">
        <tr>enter code here
    <th><%= get_column_name "#{@level1}"%></th>
    <th><%= get_column_name "#{@level2}"%></th>
    <th><%= get_column_name "#{@level3}"%></th>
    <th>abcd</th>
    </tr>
        <% @grp.each do |key, value| %>
            <% value.each do |k2, v2|%>
                <% v2.each do |k3, v3|%>
                        <tr>
                            <td><% if "#{@level1}" == "abcd"  && Person.exists?(key.to_i) %><%= "#{Person.find(key.to_i).get_name}" %><% else %><%= "#{key}" %><% end %></td>
                            <td><% if "#{@level2}" == "abcd"  && Person.exists?(k2.to_i) %><%= "#{Person.find(k2.to_i).get_name}" %><% else %><%= "#{k2}" %><% end %></td>
                            <td><% if "#{@level3}" == "abcd"  && Person.exists?(k3.to_i) %><%= "#{Person.find(k3.to_i).get_name}" %><% else %><%= "#{k3}" %><% end %></td>
                            <td><%= "#{v3.count}" if !v3.nil? %></td>
                        </tr>
                <%end%>
            <%end%>
        <%end%>
</table>

誰かがそれがNumbersまたは他の何かの問題であるかどうか教えてもらえますか?私は学生で、これをチェックするためだけにExcelを購入する余裕はありません。

一番、

4

1 に答える 1

1

より移植性の高いアプローチは、CSVまたはTSV(タブ区切り)ファイルを生成することです。Excelがなく、XLS [X]の恐怖に対処する必要がない場合、これは間違いなく良い考えです。

リンクしたRailscastは、CSVライブラリを使用して1つのソリューションを提供しました。引用フィールドを処理します。これは、後で説明するように非常に便利です。手動によるアプローチについても概説します。

コントローラに次のアクションがあると仮定します。

# widget_controller.rb
def index
  @widgets = Widget.ordered_by_name
  respond_to do |format|
    format.csv
  end
end

そして、テンプレートで次のようなものが機能します。

<%# index.csv.erb %>
ID,Name
<% @widgets.each do |w| %>
<%= w.id %>,<%= w.name %>
<% end %>

またはもっと簡潔に:

<%# index.csv.erb %>
<%= %w(ID Name).join(",") %>
<%= @widgets.map { |w| [w.id, w.name].join(",") }.join("\n") %>

引用には注意が必要です。たとえば、widgets[0].name返された場合foo,bar、データは次のようになります。

ID,Name
1,foo,bar
2,baz

解決策は、フィールドを引用することです。これについて考えたくない場合は、CSV.generate:)を使用してください。

于 2012-10-16T05:24:15.480 に答える