2017-07-30 2 views
0

Ich kann tatsächlich eine Excel generieren und den Download-Link zum Client anzeigen, aber auch möchte ich, dass die Datei in einem Ordner meines Projekts in meinem Server bleiben, mein Code ist diesSpeichern generierte Excel mit axlsx_rails in einem Ordner meines Projekts

-Controller

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 

Ansicht.xlsx.axlsx

wb = xlsx_package.workbook 

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

Ich weiß auch nicht, wie man das Excel speichert, das in einem Ordner meines Projekts generiert wurde.

Antwort

0

Es ist schwer zu sagen, ohne Ihre Anwendung zu kennen. Daher ist eine gängige Option zum Speichern Ihrer Dateien die Verwendung einer Dateiverwaltungslösung wie Carrierwave. Das bedeutet, dass Sie ein neues Modell erstellen müssen, etwa ExcelAttachments, das belong_to :user kann. Sie können dann beginnen, Ihre Dateien in diesem Modell zu speichern.

Um dies zu tun, müssen Sie möglicherweise Tempfile Klasse (google it) und streamen Sie Ihre AXLSX-Inhalte hinein und die Datei in CW zurück. This Antwort könnte ein guter Anfang sein.

0

Wenn Sie immer Speichern der Datei sind, können Sie betrügen und legen Sie diese am Ende Ihrer xlsx.axlsx Vorlage:

xlsx_package.serialize(file_name) 

Oder in der Steuerung können Sie es auf String machen, und dienen dann diese Zeichenfolge als Daten sowie schreiben in eine Datei (ungetestet Code):

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' 

Sie können oder nicht benötigen die Handler/Formate angegeben, da Ihre Anfrage xlsx bereits.

Verwandte Themen