Как сгенерировать файл Excel с помощью Rails?

Я искал в Ruby toolbox популярный, хорошо поддерживаемый инструмент для создания документов XSLX (Excel 2007 и более поздних версий), но мне ничего не удалось найти. Я также потратил много времени на поиск в Google, но большинство ответов, которые я нашел, кажутся устаревшими.

Мне нужно будет включить встроенные изображения в создаваемый документ.

Я работаю с Ruby 1.9.2 и Rails 3.

Какие-либо предложения?

Большое тебе спасибо!


person Yuval Karmi    schedule 14.08.2011    source источник
comment
Вы тоже искали Stack Overflow?   -  person Andrew Grimm    schedule 14.08.2011
comment
Да, хотя я не нашел ничего, что имело бы отношение к библиотеке Ruby. Я нашел решение .Net, но копаться в нем не помогло   -  person Yuval Karmi    schedule 15.08.2011
comment
Вы смотрели на stackoverflow.com/questions/5887518/ или stackoverflow.com/questions/2227973/ или stackoverflow.com/questions/4644341/?   -  person Andrew Grimm    schedule 15.08.2011
comment
Да, но ни один из них не содержит помощи по добавлению изображений в электронную таблицу (по крайней мере, не на Mac)   -  person Yuval Karmi    schedule 15.08.2011


Ответы (3)


Немного поздно в игру, но вот. Вы должны использовать гем axlsx

На Github: https://github.com/randym/axlsx

На Rubygems: https://rubygems.org/gems/axlsx

На Rubytookbox: https://www.ruby-toolbox.com/projects/axlsx

Из README

p = Axlsx::Package.new
p.workbook do |wb|
  wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
    img = File.expand_path('../image1.jpeg', __FILE__)
    sheet.add_image(:image_src => img, :noSelect => true, :noMove => true,  :hyperlink=>"http://axlsx.blogspot.com") do |image|
      image.width=720
      image.height=666
      image.hyperlink.tooltip = "Labeled Link"
      image.start_at 2, 2
    end
  end
end
person randym    schedule 18.04.2012
comment
С опозданием понял, что я должен был указать и на гем рельсов для этой библиотеки. Вы по-прежнему получаете всю мощь axlsx, но он автоматизирует генерацию столбца/строки для любого наследующего объекта AR с локализацией. Действительно помогает ускорить создание отчетов в rails, поскольку вам не нужно создавать отчеты для всех ваших моделей. - person randym; 24.05.2012
comment
Этот камень мне очень помог, спасибо! Даже если ответ пришел с опозданием, это здорово. Хороший повод ответить на вопросы спустя много времени ;) - person Francesco Belladonna; 09.09.2012
comment
О человек, вы создатель драгоценного камня! Не заметил! Ожидайте пожертвований, я экспериментирую с вашим драгоценным камнем, и это здорово, я использую его в своем текущем проекте. - person Francesco Belladonna; 09.09.2012
comment
рад, что тебе понравилось. не стесняйтесь схватить меня на irc, если у вас есть какие-либо вопросы. если вы используете рельсы, вам также следует взглянуть на axlsx_rails github.com/straydogstudio/axlsx_rails. . - person randym; 09.09.2012
comment
Да, я смотрел ваш блог и нашел его. Я следую вашим примерам - person Francesco Belladonna; 09.09.2012
comment
@randym Может ли этот драгоценный камень обрабатывать изображения из загруженного файла Excel, а также вставлять их? - person steventnorris; 05.12.2014
comment
@randym Ваш драгоценный камень axlsx выглядит замечательно, и дополнение axlsx_rails тоже великолепно. Теперь, если бы я мог понять, как их печатать без постоянных ошибок... (усмехается) Действительно, спасибо за отличный код. - person Richard_G; 11.05.2015

Я использовал жемчуг электронных таблиц. Вот некоторый код, который я использовал, чтобы записать его в файл и отправить.

spreadsheet_name = @role.title

   book = Spreadsheet::Workbook.new 
   sheet1 = book.create_worksheet :name => spreadsheet_name

   @people.each_with_index  { |person, i| 
     sheet1.row(i).replace [person.first_name, person.last_name, person.email, person.title, person.organization, person.phone, person.street, person.street2, person.city, person.state, person.zip, person.country]
   }        

   export_file_path = [Rails.root, "public", "uploads", "exports", "#{ @team.sort_name }_#{ DateTime.now.to_s }.xls"].join("/")
   book.write export_file_path
   send_file export_file_path, :content_type => "application/vnd.ms-excel", :disposition => 'inline'

Вероятно, есть способ сделать это в памяти, а не записывать файл ... но я не стал разбираться в этом.

Я не видел необходимости во встроенных изображениях, но я оставлю это, потому что это может помочь кому-то другому.

person natedavisolds    schedule 03.09.2011

Вы можете попробовать этот драгоценный камень

https://github.com/harvesthq/simple_xlsx_writer

И

https://github.com/cxn03651/writeexcel/

person fl00r    schedule 14.08.2011
comment
Я наткнулся на него, но это «простой» писатель, поскольку он не допускает специальных вставок, таких как изображения. Это, конечно, если я что-то упустил. Любые идеи? - person Yuval Karmi; 15.08.2011
comment
@yuval, я думаю, что нет ни одного драгоценного камня, который мог бы выполнить эту работу - person fl00r; 15.08.2011