2016-02-27 1 views
0

J'ai créé un code qui génère un fichier xls, puis je le passe à l'expéditeur pour l'envoyer en pièce jointe. Mais, je continue à obtenir les mêmes erreurs encore et encore:rails - attacher le fichier xls au courrier électronique

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

Ou

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

Mon code est:

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

*** données - est le fichier xls que je; m passant à cette méthode.

Merci les gars à venir,

+0

ce petit bijou que vous utilisez pour générer 'xlsx'? – devanand

+0

@devanand J'utilise: 'spreadsheet', '~> 1.1', '> = 1.1.1' et 'to_spreadsheet' –

+0

est-ce que 'data' est une chaîne? peut être pas. alors vous obtiendrez l'erreur 'longueur'. debug quel type de données 'data' est. – devanand

Répondre

0

Bon les gars, j'ai trouvé la réponse. Le code devrait ressembler à ceci:

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

action Mailer vous attend de passer un objet File -comme comme une pièce jointe, mais en passant de votre code, il les données du tableur directement. Heureusement, Ruby a une classe appelée StringIO que nous pouvons utiliser pour convertir notre feuille de calcul en quelque chose qui agit comme un 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 
+0

merci pour le code, je l'ai essayé. Mais, quand j'ai reçu le courrier et essayé d'ouvrir le fichier xls, il a écrit: "Le format du fichier ou l'extension du fichier n'est pas valide.Vérifiez que le fichier n'a pas été corrompu et que l'extension du fichier correspond au format du fichier. " –

+0

Cela semble être un [problème semi-commun] (https://github.com/zdavatz/spreadsheet/issues?utf8=✓&q=is%3Aissue+corrupt) avec la feuille de calcul. Essayez-vous de modifier une feuille de calcul créée à l'origine par Excel sur un Mac? Apparemment [ce n'est pas vraiment pris en charge] (https://github.com/zdavatz/spreadsheet/issues/162#issuecomment-169043728) –

+0

Correct. C'est exactement ce que je fais ... La seule réponse dans ce cas est de télécharger le fichier sur mon serveur, puis d'en utiliser le chemin vers le fichier joint. True? –

0

Le morceau ci-dessous de code fonctionne comme un charme. J'ai essayé ceci, utilisé dans une application de travail.

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: "[email protected]", bcc: bcc_emails) do |format| 
     format.html { render :partial => "users/mail_body"} 
    end 
    end 

FYI: Je l'ai utilisé petit bijou de feuille de calcul Excel pour créer le