ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1558|回复: 0

导出 xls 文件 并下载到客户端

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-5 18:23 | 显示全部楼层 |阅读模式
1. 导出 .xls 文件 并下载到客户端:


这里使用 spreadsheet_on_rails 插件,安装两个gem就可以了

spreadsheet ,和它依赖的包 ruby-ole


sudo gem install spreadsheet

sudo gem install ruby-ole   


*** LOCAL GEMS ***


spreadsheet (0.6.3.1)

ruby-ole (1.2.10)


并在配置文件中添加:

Ruby代码  

  • config.gem 'spreadsheet'   


我以 user model 为例进行导出:


建议: 一个比较符合rails规范的做法是,请求格式为 xls,如 /users.xls


首先在 config/initializers/mime_types.rb  中添加


Ruby代码  

  • Mime::Type.register "text/excel", :xls  



这样就可以在view 中可以使用 formatted_users_path 带格式请求了

view中:

Ruby代码  

  • <%= link_to "Excel", formatted_users_path(:format => 'xls')%>  


请求到 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.strftime("%Y%m%d")}.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  fastercsv :

sudo gem install fastercsv

#  fastercsv (1.5.0)


添加配置:

Ruby代码  

  • config.gem 'fastercsv'  


view中:

Ruby代码  

  • <%= link_to "CSV", formatted_users_path(:format => 'csv')%>  


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的也能导出了。

总得来说 功能都实现了,感觉这两个输出的效果差不多,不知一个spreadsheet gem 能不能搞定?

有知道的还请指教,这里先谢了。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 04:27 , Processed in 0.031816 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表