【问题标题】:How to generate an Excel file with Rails?如何使用 Rails 生成 Excel 文件?
【发布时间】:2011-08-14 10:19:14
【问题描述】:

我在 Ruby 工具箱中搜索一个流行的、受良好支持的工具来生成 XSLX(Excel 2007 及更高版本)文档,但我没有找到任何东西。 我也花了很多时间在 Google 上搜索,但我找到的大多数答案似乎都已经过时了。

我需要在我生成的文档中包含内嵌图像。

我正在使用 Ruby 1.9.2 和 Rails 3。

有什么建议吗?

非常感谢!

【问题讨论】:

标签: ruby ruby-on-rails-3 spreadsheet export-to-excel


【解决方案1】:

游戏有点晚了,但你走了。 你应该使用 axlsx gem

在 Github 上: https://github.com/randym/axlsx

在 Rubygems 上: https://rubygems.org/gems/axlsx

在 Rubytookbox 上: https://www.ruby-toolbox.com/projects/axlsx

来自自述文件

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

【讨论】:

  • 迟到地意识到我也应该指出这个库的 rails gem。您仍然可以获得 axlsx 的所有功能 - 但它会自动为任何具有本地化的 AR 继承对象生成列/行。确实有助于加快您在 Rails 中生成报告的速度,因为您不必为所有模型滚动报告。
  • 这颗宝石对我帮助很大,谢谢!即使答案来晚了,也很好。很长一段时间后回答问题的好理由;)
  • 天哪,你是宝石的创造者!没注意!期待一些捐款,我正在试验你的 gem,非常棒,我正在我当前的项目中使用它。
  • 很高兴你喜欢它。如果您有任何问题,请随时在 irc 上抓住我。如果你在 Rails 上,你也应该看看 axlsx_rails github.com/straydogstudio/axlsx_rails
  • 是的,我看了你的博客并找到了它。我!正在学习你的例子
【解决方案2】:

我用过spreadsheet gem。这是我用来将其写入文件并发送的一些代码。

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'

可能有一种方法可以在内存中执行此操作而不是写入文件..但我没有花时间研究它。

我没有看到需要的内联图像,但我会留下它,因为它可能对其他人有帮助。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 我偶然发现了它,但它是一个“简单”的作家,因为它不允许特殊的插入,例如图像。当然,除非我遗漏了什么。有什么想法吗?
    • @yuval,我认为没有任何宝石可以完成这项工作
    猜你喜欢
    • 2018-05-01
    • 2018-05-20
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    相关资源
    最近更新 更多