2016-02-24 2 views
0

Je suis confronté à un problème de fermeture de la feuille excel générée par gem 'axlsx_rails'. Par exemple:Feuille Zip Excel générée par les rails gem axlsx

class SampleController < ApplicationController::Base 

    def export 
    if params[:zip] 
     xxxx 
    else 
     render xlsx: 'export', filename: filename, disposition: 'attachment' 
    end 
    end 

end 

Dans l'exemple ci-dessus, en ce moment l'utilisateur final est en mesure de télécharger la feuille Excel mais si l'utilisateur final demande un fichier zip de feuille Excel, comment pouvons-nous faire cela. En raison du code dans le bloc 'else', l'utilisateur final peut télécharger la feuille Excel. Ce que je dois faire si l'utilisateur veut que la feuille d'excel soit zippée avant le téléchargement. Si vous avez besoin de plus d'informations, SVP faites le moi savoir. Merci

Répondre

0

Ce code non testé est, mais essayez d'utiliser Zip::ZipOutputStream:

def export 
    if params[:zip] 
    compressed_filestream = Zip::ZipOutputStream.write_buffer do |zos| 
     content = render_to_string xlsx: 'export', filename: filename 
     zos.put_next_entry(filename) 
     zos.print content 
    end 
    compressed_filestream.rewind 
    send_data compressed_filestream.read, filename: 'export.zip', type: 'application/zip' 
    else 
    render xlsx: 'export', filename: filename, disposition: 'attachment' 
    end 
end 

Si cela ne fonctionne pas, créer un problème sur Github, et après nous le faire fonctionner, nous pouvons ajouter à la documentation.

+0

Merci Noel. Cela a fonctionné pour moi mais j'ai refactored le peu de code en fonction de mon application – Sheharose

+0

Si vous obtenez AbstractController :: DoubleRenderError, essayez de mettre 'self.response_body = nil' après' render_to_string'. Cela m'a aidé. J'utilise Rails 4.2.5 – yivo