0

我按照此Railscasts 链接从 Rails导出 CSV 将我的 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>

有人可以告诉我是数字问题还是其他问题。我是一名学生,买不起excel来检查一下。

最好的,

4

1 回答 1

1

一种更便携的方法是只生成 CSV 或 TSV(制表符分隔)文件。如果您没有 Excel 并且不需要处理 XLS[X] 的恐怖,这绝对是一个好主意。

您链接到的 Railscast 使用CSV库提供了一种解决方案。它为您处理引用字段,这非常好,我们稍后会看到。我还将概述手动方法:

假设您在控制器中有此操作:

# 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 回答