1. 导出 .xls 文件 并下载到客户端:
这里使用 spreadsheet_on_rails 插件,安装两个gem就可以了
spreadsheet ,和它依赖的包 ruby-ole
spreadsheet (0.6.3.1)
ruby-ole (1.2.10)
并在配置文件(environment.rb)中添加:
Ruby代码
- config.gem
'spreadsheet'
我以 user model 为例进行导出:
建议: 一个比较符合rails规范的做法是,请求格式为 xls,如 /users.xls
首先在 config/initializers/mime_types.rb
Ruby代码
- Mime::Type.register
"text/excel", :xls
view中:
Ruby代码
- <a href="/admin/billing_stat/billing?format=xls"><span><%= I18n.t("a.b.c")%></span></a>
请求到 index action,下面是关键的了
Ruby代码
- def
index -
@users = User.all -
respond_to do |format| -
format.xls { -
send_data(xls_content_for(@users), -
:type => "text/excel;charset=utf-8; header=present", -
:filename => "Report_Users_#{Time.now.to_date}.xls") -
} -
format.html -
end - end
- private
- def
xls_content_for(objs) -
xls_report = StringIO.new -
book = Spreadsheet::Workbook.new -
sheet1 = book.create_worksheet :name => "Users" -
-
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10 -
sheet1.row(0).default_format = blue -
-
sheet1.row(0).concat %w{Username Email} #如果为比较复杂的数组请用[]代替 -
count_row = 1 -
objs.each do |obj| -
sheet1[count_row,0]=obj.login -
sheet1[count_row,1]=obj.email -
count_row += 1 -
end -
-
book.write xls_report -
xls_report.string - end
这样就 ok 了,至于里面的样式看看文档己会改了。
2.导出 csv 格式的文件
先安装一个gem
sudo gem install fastercsv
#
添加配置:
Ruby代码
- config.gem
'fastercsv'
view中:
Ruby代码
-
<a href="/admin/billing_stat/billing?format=xls"><span><%= I18n.t("a.b.csv")%></span></a>
controller,respond_to 中继续添加:
Ruby代码
- format.csv
{ -
send_data(csv_content_for(@users), -
:type => "text/csv;charset=utf-8; header=present", -
:filename => "Report_Users_#{Time.now.strftime("%Y%m%d")}.csv") -
} -
- private
- def
csv_content_for(objs) -
FasterCSV.generate do |csv| -
csv << ["Username", "Email"] -
-
objs.each do |record| -
csv << [ -
record.login, -
record.email -
] -
end -
-
end - end
这样csv的也能导出了。