我一直在尝试在我的应用中保存xlsx文件。我正在使用宝石'acts_as_xlsx' 我想用xlsx生成一个文件并发送它。 问题是文档是在后台生成的,我不想渲染视图。这是一个应该返回xlsx文件的脚本。
我尝试做类似的事情:
file = File.open("report.xlsx", relation.to_xlsx, type: "application/vnd.openxmlformates-officedocument.spreadsheetml.sheet")
但是这会返回一个错误,因为File.open的第二个参数必须是一个字符串。
提前致谢!
答案 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字符串。