将xlsx文件保存在rails中

时间:2014-07-11 10:52:14

标签: ruby-on-rails-4 xlsx axlsx

我一直在尝试在我的应用中保存xlsx文件。我正在使用宝石'acts_as_xlsx' 我想用xlsx生成一个文件并发送它。 问题是文档是在后台生成的,我不想渲染视图。这是一个应该返回xlsx文件的脚本。

我尝试做类似的事情:

file = File.open("report.xlsx", relation.to_xlsx, type: "application/vnd.openxmlformates-officedocument.spreadsheetml.sheet")

但是这会返回一个错误,因为File.open的第二个参数必须是一个字符串。

提前致谢!

1 个答案:

答案 0 :(得分:1)

to_xlsx应该返回Axlsx包。该包将自己保存到文件:

relation.to_xlsx.serialize("report.xlsx")

但是,如果您通过电子邮件发送,则只需将其作为附件即可。您无需将其另存为文件:

class UserMailer < ActionMailer::Base
  def export(users)
    content = User.to_xlsx(data: users).to_stream.string
    attachments["Users.xlsx"] = {mime_type: Mime::XLSX, content: content}
    ...
  end
end

另外,您会注意到上面的acts_as_xlsx为您注册Mime::XLSX。所以你可以使用它而不是长mime字符串。