在rails中生成excel

Aad*_*adi 3 rubygems ruby-on-rails ruby-on-rails-plugins ruby-on-rails-3

我正在尝试在轨道上创建ruby中的excel表.所以我使用了插件Rexcel.当我运行应用程序时,我收到以下错误.

未初始化的常量Rexcel :: Workbook :: Builder

我添加了以下代码,然后这个错误命中

workbook = Rexcel::Workbook.new

worksheet = workbook.add_worksheet("Customers")

worksheet.add_line("name","test")

headers['Content-Type'] = "application/vnd.ms-excel"

headers['Content-Disposition'] = 'attachment; filename="excel-export.xlsx"'
headers['Cache-Control'] = 'max-age=0'
headers['pragma']="public"
workbook.build
Run Code Online (Sandbox Code Playgroud)

怎么解决这个?

tom*_*sop 8

我建议使用Spreadsheet而不是Rexcel因为肯定更成熟,我正在使用它与Rails 3没有任何问题.

这是文档.

整个过程将是:

book = Spreadsheet::Workbook.new
sheet = book.create_worksheet :name => 'Customers'
sheet.row(0).concat %w{Name Country Acknowlegement}
book.write '/path/to/output/excel-file.xls'
Run Code Online (Sandbox Code Playgroud)


oma*_*oma 5

+1到tommasop

我想补充一下.如果您和我一样认为这是呈现数据,就像xml,html或json一样,您不想写入光盘.如果您正在考虑使用Heroku,则Heroku是只读的.

我会改变book.write '/somepath..',以

def xls
  .. your stuff .. 
  blob = StringIO.new("")
  book.write blob
  blob.string
end
Run Code Online (Sandbox Code Playgroud)

然后,在控制器中做

send_data @customer.xls, :type => :xls, :filename => @customer.xls_file_name
Run Code Online (Sandbox Code Playgroud)

记得在初始化程序中添加mime类型注意,我刚刚意识到这些示例来自我的rails 2.3.10 app.也许它在轨道3中有所不同.

Mime::Type.register "application/vnd.ms-excel", :xls
Run Code Online (Sandbox Code Playgroud)