2017-07-30 5 views
0

Je peux réellement générer un Excel et montrer le lien de téléchargement au client mais aussi je veux que le fichier reste dans un dossier de mon projet dans mon serveur, mon code est-ceEnregistrer généré excel avec axlsx_rails dans un dossier de mon projet

contrôleur

def generate_report 
    render xlsx: 'prueba',template: 'admin/client_reports/report_a.xlsx.axlsx', filename: "a.xlsx", disposition: 'inline', 
    xlsx_created_at: 3.days.ago, xlsx_author: "Elmer Fudd" 
end 

Voir.xlsx.axlsx

wb = xlsx_package.workbook 

wb.add_worksheet(name: "A") do |sheet| 
    sheet.add_row ["Titulo", "Precio"] 
end 

Je ne sais pas non plus comment sauvegarder l'Excel généré dans un dossier de mon projet.

Répondre

0

C'est difficile à dire sans connaître votre application, donc une option commune pour enregistrer vos fichiers est en utilisant une solution de gestion de fichiers comme Carrierwave. Ce qui signifie que vous aurez besoin de créer un nouveau modèle, quelque chose comme ExcelAttachments, qui peut belong_to :user. Vous pouvez ensuite commencer à enregistrer vos fichiers sur ce modèle.

Pour ce faire, vous devrez peut-être utiliser la classe Tempfile (google it) et diffuser votre contenu AXLSX, et renvoyer le fichier dans CW. This réponse pourrait être un bon point de départ.

0

Si vous êtes toujours d'enregistrer le fichier, vous pouvez tricher et placez ceci à la fin de votre modèle de xlsx.axlsx:

xlsx_package.serialize(file_name) 

Ou, dans le contrôleur, vous pouvez le rendre à la chaîne, et ensuite servir cette chaîne sous forme de données ainsi que écrire dans un fichier (code non testé):

data = render_to_string handlers: [:axlsx], formats: [:xlsx], template: 'admin/client_reports/report_a.xlsx.axlsx' 
File.open("/file/path/and/name.xlsx","w") {|f| f.write(data) } 
send_data data, filename: "prueba.xlsx", type: Mime[:xlsx], disposition: 'inline' 

Vous pouvez ou ne pouvez pas besoin des gestionnaires/formats spécifiés depuis votre demande est xlsx déjà.