Excel 和 Ruby 兼容性



我点击了这个 Railscasts 链接,从 Railss 导出 CSV 将我的 html 表(动态生成)导出到 xls 并在我这样做时下载我的 excel 文档.xls

但是,当我在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 只是为了检查这个。

最好

一种更便携的方法是仅生成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 :)。

相关内容

  • 没有找到相关文章

最新更新