轨 – 附加xls文件到电子邮件

我创build了一个生成xls文件的代码,然后将它传递给邮件发送者作为附件。 但是,我一再得到同样的错误:

TypeError: no implicit conversion of Spreadsheet::Workbook into String 

要么

 NoMethodError: undefined method `length' for #<Spreadsheet::Workbook:0x007fe937e4fe80> 

我的代码是:

 def xls_mailer (data) attachments['HelloWorld.xlsx'] = data mail(subject: "Hi", to: @gmail.email) end 

*** data – 是我传递给此方法的xls文件。

谢谢你们,

Action Mailer希望你把它作为一个附件传递给一个类似File的对象,但是你的代码直接把它传递给电子表格数据。 幸运的是,Ruby有一个名为StringIO的类,我们可以使用StringIO电子表格转换为像File一样的东西:

 def xls_mailer (spreadsheet) spreadsheet_file = StringIO.new spreadsheet.write(spreadsheet_file) attachments['HelloWorld.xls'] = spreadsheet_file mail(subject: "Hi", to: @gmail.email) end 

好吧,伙计们,我find了答案。 代码应该是这样的:

  spreadsheet_file = StringIO.new data.write(spreadsheet_file) attachments['HelloWorld.xls'] = spreadsheet_file.read 

下面的代码就像一个魅力。 我已经尝试过,在一个工作的应用程序中使用。

 def send_excel_report(file_name, emails, subject, email_content, file_path, bcc_emails = []) attachments["#{file_name}.xls"] = File.read(file_path) mail(to: emails, subject: subject, from: "my_email@gmail.com", bcc: bcc_emails) do |format| format.html { render :partial => "users/mail_body"} end end 

仅供参考:我已经使用电子表格创buildexcel