3

Je suis en train de créer une feuille excel en rubis sur des rails. J'ai donc utilisé le plugin Rexcel. Lorsque j'exécute l'application, j'obtiens l'erreur suivante.générer excel dans les rails

uninitialized Rexcel constante :: :: Cahier Builder

j'avais ajouté le code suivant, cette erreur de frapper

workbook = Rexcel::Workbook.new 

worksheet = workbook.add_worksheet("Customers") 

worksheet.add_line("name","test") 

headers['Content-Type'] = "application/vnd.ms-excel" 

headers['Content-Disposition'] = 'attachment; filename="excel-export.xlsx"' 
headers['Cache-Control'] = 'max-age=0' 
headers['pragma']="public" 
workbook.build 

Comment résoudre ce problème?

+0

Êtes-vous à la recherche d'une solution pour Rails 3.x ou une autre version? En outre, veuillez publier la trace de pile de l'erreur. – Zabba

+0

oui, je regarde dans les rails 3.0. La trace complète suit .. ------------------------------------------- -------- NameError en FormadminController # télécharger uninitialized Rexcel constante :: :: Cahier Builder fournisseur/plugins/Rexcel/lib/rexcel.rb: 210: dans 'build » app/controllers/formadmin_controller .rb: 192: dans 'download ' actionpack (3.0.0) lib/action_controller/metal/implicit_render.rb: dans' send_action ' actionpack (3.0.0) lib/abstract_controller/base.rb: 150: dans 'process_action ' actionpack (3.0.0) lib/action_controller/metal/rendu.rb: dans' process_action' – Aadi

Répondre

8

Je conseillerais d'utiliser Spreadsheet au lieu de Rexcel car il est certainement plus mature et je l'utilise avec Rails 3 sans problèmes.

Here is the documentation.

Le processus global serait:

book = Spreadsheet::Workbook.new 
sheet = book.create_worksheet :name => 'Customers' 
sheet.row(0).concat %w{Name Country Acknowlegement} 
book.write '/path/to/output/excel-file.xls' 
5

+1 à tommasop

Je voudrais ajouter. Si vous, comme moi, vous considérez ceci comme présentant des données, tout comme xml, html ou json, vous ne voulez pas écrire sur le disque. Heroku est en lecture seule si vous envisagez d'utiliser cela.

je changerais le book.write '/somepath..' à

def xls 
    .. your stuff .. 
    blob = StringIO.new("") 
    book.write blob 
    blob.string 
end 

puis, dans le contrôleur ne

send_data @customer.xls, :type => :xls, :filename => @customer.xls_file_name 

pas oublier d'ajouter le type MIME dans votre initialiseur NOTE, je viens de réaliser que ces exemples sont de mon rails 2.3.10 app. Peut-être qu'il diffère dans les rails 3.

Mime::Type.register "application/vnd.ms-excel", :xls