генерировать превосходство в рельсах - PullRequest
3 голосов
/ 11 ноября 2010

Я пытаюсь создать лист Excel в ruby ​​on rails. Поэтому я использовал плагин Rexcel. Когда я запускаю приложение, я получаю следующую ошибку.

неинициализированная константа Rexcel :: Рабочая книга :: 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

Как это решить?

Ответы [ 2 ]

8 голосов
/ 11 ноября 2010

Я бы посоветовал использовать электронную таблицу вместо 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'
5 голосов
/ 12 ноября 2010

+ 1 к Tommasop

Я бы хотел добавить. Если вы, как и я, считаете, что вы представляете данные, как XML, HTML или JSON, вы не хотите записывать на диск. Heroku только для чтения, если вы планируете использовать это.

Я бы изменил book.write '/somepath..' на

def xls
  .. your stuff .. 
  blob = StringIO.new("")
  book.write blob
  blob.string
end

затем в контроллере сделать

send_data @customer.xls, :type => :xls, :filename => @customer.xls_file_name

не забудьте добавить тип mime в инициализатор. ПРИМЕЧАНИЕ. Я только что понял, что эти примеры взяты из моего приложения rails 2.3.10. Может быть, это отличается от рельсов 3.

Mime::Type.register "application/vnd.ms-excel", :xls
...