我点击了这个 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
:)。