79 votes

Analyser des fichiers XLS et XLSX (MS Excel) avec Ruby?

Existe-t-il des gemmes capables d'analyser les fichiers XLS et XLSX? J'ai trouvé Spreadsheet et ParseExcel, mais ils ne comprennent pas tous les deux le format XLSX :( Des idées?

Je vous remercie.

56voto

Chris Kimpton Points 2916

Je viens de trouver roo , qui pourrait faire le travail - répond à mes besoins, en lisant un tableur de base.

44voto

Bruno Buccolo Points 515

La gemme roo fonctionne très bien pour Excel (.xls et .xlsx) et est en cours de développement.

Je suis d'accord que la syntaxe n'est pas géniale, ni rubis. Mais cela peut être facilement réalisé avec quelque chose comme:

 class Spreadsheet
  def initialize(file_path)
    @xls = Roo::Spreadsheet.open(file_path)
  end

  def each_sheet
    @xls.sheets.each do |sheet|
      @xls.default_sheet = sheet
      yield sheet
    end
  end

  def each_row
    0.upto(@xls.last_row) do |index|
      yield @xls.row(index)
    end
  end

  def each_column
    0.upto(@xls.last_column) do |index|
      yield @xls.column(index)
    end
  end
end
 

27voto

the_minted Points 161

Je suis en utilisant le ruisseau qui utilise nokogiri. Il est rapide. Utilisé 8,3 secondes sur un 21x11250 xlsx tableau sur mon Macbook Air. L'ai eu à travailler sur ruby 1.9.3+. Le format de sortie pour chaque ligne est un hachage de ligne et de colonne nom pour le contenu d'une cellule: {"A1"=>"une cellule", "B1"=>"une autre cellule"} Le hachage ne donne aucune garantie que les clés seront à l'origine, l'ordre des colonnes. https://github.com/pythonicrubyist/creek

dullard est un autre grand, qui utilise des nokogiri. Il est super rapide. Utilisé en 6,7 secondes sur un 21x11250 xlsx tableau sur mon Macbook Air. L'ai eu à travailler sur ruby 2.0.0+. Le format de sortie pour chaque ligne est un tableau: ["une cellule", "une autre cellule"] https://github.com/thirtyseven/dullard

simple_xlsx_reader qui a été mentionné, c'est grand, un peu lent. Utilisé 91 secondes sur un 21x11250 xlsx tableau sur mon Macbook Air. L'ai eu à travailler sur ruby 1.9.3+. Le format de sortie pour chaque ligne est un tableau: ["une cellule", "une autre cellule"] https://github.com/woahdae/simple_xlsx_reader

Un autre élément intéressant est oxcelix. Il utilise du bœuf analyseur SAX qui soi-disant plus rapide que les deux nokogiri DOM et SAX parser. Il est censé sorties d'une Matrice. Je ne pouvais pas le faire fonctionner. Aussi, il y avait quelques problèmes de dépendance avec rubyzip. Ne le recommanderais pas.

En conclusion, si vous utilisez une version de ruby inférieur à la version 2.0.0, l'utilisation du ruisseau. Si à l'aide de ruby 2.0.0+, utilisez dullard parce que c'est plus rapide et conserve la colonne du tableau de l'ordre.

7voto

Linuxios Points 16966

Si vous êtes à la recherche pour les bibliothèques plus modernes, jetez un oeil à la feuille de calcul: http://spreadsheet.rubyforge.org/GUIDE_txt.html. Je ne peux pas dire si il supporte les fichiers XLSX, mais en considérant qu'il est activement développé, j'imagine qu'il n' (je ne suis pas sur Windows, ou avec le Bureau, donc je ne peux pas tester).

À ce point, il ressemble à roo est une bonne option. Il prend en charge XLSX, permet de (certains) d'itération en utilisant simplement times avec accès à la cellule. Je l'avoue, c'est pas assez.

Aussi, RubyXL pouvez maintenant vous donner une sorte d'itération à l'aide de leur extract_data méthode, qui vous donne un tableau 2d de données, qui peuvent facilement être itéré.

Alternativement, si vous êtes en essayant de travailler avec des fichiers XLSX sur Windows, vous pouvez utiliser Ruby Win32OLE bibliothèque qui permet de faire l'interface avec les objets OLE, comme ceux fournis par Word et Excel. Avec elle, vous pouvez choisir de ne pas afficher Excel, chargez votre fichier XLSX, et d'y accéder à travers elle. Je ne sais pas si il supporte l'itération, cependant, je ne pense pas que ce serait trop dur à construire autour de la fourniture des méthodes, comme c'est la pleine Microsoft OLE de l'API pour Excel. Voici la documentation: http://support.microsoft.com/kb/222101 Voici la perle rare: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/win32ole/rdoc/WIN32OLE.html

Là encore, les options ne regarde pas beaucoup mieux, mais il n'y a pas grand chose d'autre là-bas, j'en ai peur. il est difficile d'analyser un format de fichier qui est une boîte noire. Et ces quelques personnes qui ont réussi à briser il ne l'a pas fait que de manière visible. Google Docs est à code source fermé, et LibreOffice est des milliers de lignes de harry C++.

4voto

Jason Galvin Points 701

La gem rubyXL analyse magnifiquement les fichiers XLSX.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X