Publié par marc | 0 commentaires

Il arrive souvent que l’on aie besoin d’exporter un ensemble d’informations pour y accéder de manière plus conviviale dans un tableur.

Dans cet article, je vais vous montrer deux manières d’exporter un ensemble de données, ou plutôt deux formats différents pour cette exportation.

Partie 1 : Exporter en csv

Le premier format qui me vient à l’esprit quand on me parle de tableur, est bien évidemment le format csv (Comma Separated Values) qui, pour ceux qui ne le sauraient pas encore, sépare chaque valeur d’une colonne par une virgule.

La première chose à faire c’est d’installer la gem fastercsv.

   1  sudo gem install fastercsv

Puis d’installer le plugin to_csv d’Ary Djmal dans votre application.

   1  script/plugin install git://github.com/arydjmal/to_csv.git

La suite est encore plus simple. Pas besoin de ‘builder’, il suffit, dans le bloc respond_to de l’action de votre contrôleur et pour le format csv, d’appeler la méthode to_csv sur votre tableau de données, elle est pas belle la vie ? :-)

   1  class UsersController < ApplicationController
   2    def index
   3      @users = User.find(:all)
   4  
   5      respond_to do |format|
   6        format.html
   7        format.csv { send_data @users.to_csv }
   8      end
   9    end
  10  end

Il suffit alors d’ajouter dans votre vue un lien du style :

   1  <%= link_to "Exporter en csv", formatted_users_path(:format => :csv) %>

Et le tour est joué !

Partie 2 : Exporter en xls

Mais je vois déjà venir les mauvaises langues avec leurs gros sabots :

“Haaaa mais môôôsieur, le csv c’est bien beau mais mon Excel(lent) tableur préféré ne gère pas les caractères en UTF-8 dans un csv”

“Pas de bol”, vous dirais-je, mais pas de panique Ary a pensé à vous, pauvres utilisateurs de MS Excel.

Première étape, il nous faut ajouter ce nouveau type de fichier obscur dans notre initializer mime_types que vous trouverez à config/initializers/mime_types.rb

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

Et d’installer un second plugin, to_xls

   1  script/plugin install git://github.com/arydjmal/to_xls.git

Ouf ! Le plus dur est fait :-)

La suite est à peu de choses près exactement la même que pour to_csv, sauf qu’il s’agit maintenant de to_xls, donc, au risque de me répéter, elle est pas belle la vie ?

   1  class UsersController < ApplicationController
   2    def index
   3      @users = User.find(:all)
   4  
   5      respond_to do |format|
   6        format.html
   7        format.xls { send_data @users.to_xls }
   8      end
   9    end
  10  end

Il suffit alors d’ajouter un lien dans notre vue qui fait appel au bon format :

   1  <%= link_to "Exporter en xls", formatted_users_path(:format => :xls) %>

La méthode to_xls crée en fait un fichier XML lisible par Excel. Attention cependant, cela ne marchera que pour les versions d’Excel 2003 et plus.

Quelques liens de référence:

to_csv plugin: Better Excel compatibility

to_xls plugin: Export to Excel in Rails the easy way

Export to Excel in Rails 2

0 Commentaires

Ajouter un commentaire

Vous devez être identifié pour poster un commentaire. Identifiez-vous, ou inscrivez-vous si ce n'est déjà fait.