Ruby spreadsheet 谁用过这个插件,给个实例看看!没有研究明白,导数据 excel

sjzg001 · 2012年12月10日 · 最后由 hsiss 回复于 2012年12月11日 · 3959 次阅读

spreadsheet 谁再用这个插件,我要导数据,到成 excel 格式的不知到选择这个插件是否合适,本来想用 win32ole,无奈服务器是 ubuntu。

非要 excel 格式么?csv 不好么?excel 可以打开 csv 的

匿名 #2 2012年12月10日

@sjzg001 如果你要用 Excel 格式的话,就用 HTML 的 table 表格,还支持 CSS。输出的 Content 强制为 Download,然后默认文件名后缀为.xlsx,直接 Excel 打开,OK!自己实现一下应该比较容易~ 我能想到就是增加一个 respond 为 Excel。

windows,ubuntu,mac 下都可用 在 controller 里面

#获取数据,data 可以用 ActiveRecord::Base.connect.select_all 查询出来 data = xxxx

xls_report = StringIO.new
book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet :name => "表单名"

#表头 sheet1.row(0).default_format = Spreadsheet::Format.new :color => :black, :weight => :bold, :size => 10
keys = params[:columns].keys.compact.collect{|key| key.to_i}.sort.collect{|key| key.to_s} sheet1.row(0).concat(keys.collect{|key| params[:columns][key][:column_header]})

#写入具体数据,这个看具体应用 ,这里列是从前台 extjs 根据实际显示的 grid 的列和宽度传过来的
row_num = 1 data.each do |row| sheet1.row(row_num).concat keys.collect{|key| row[params[:columns][key][:data_index]]} row_num = row_num + 1 end #调整各列的宽度 keys.each_with_index do |key,index| sheet1.column(index).width = params[:columns][key][:column_width].to_f/10 end

book.write xls_report

send_data(xls_report.string, :filename => 'your_excel_file_name.xls', :type => 'application/vnd.ms-excel', :disposition => 'inline')

5 楼 已删除

#4 楼 @hsiss 问一下他的数据类型怎么转化?好比“50bb174260388b08260000fa”存不进去

需要先明确一下你的要求范围。

Excel2007 之后采用了新的 XML 为基础的文件格式。如果只支持 2007 之后的版本的话,推荐一下 github randym/axlsx

#7 楼 @blueplanet 谢谢!看了觉得插件很强大

#6 楼 @sjzg001 excel 中数据类型很弱的,50bb174260388b08260000fa 可以在前面加一个',也就是说写入的时候用字符串"'50bb174260388b08260000fa"

需要 登录 后方可回复, 如果你还没有账号请 注册新账号