2009-10-07 11 views
1

J'ai une application web Ruby + Merb qui doit estimer rapidement (ou compter exactement) le nombre de lignes d'une feuille de calcul. Il accepte tous les formats pris en charge par la bibliothèque roo, y compris les formats .xls, .xlsx, .ods et les formats textuels tels que CSV et TSV.Estimation rapide du nombre de lignes dans un fichier Excel

CSV/TSV est facile et rapide:

`cat #{filepath} | dos2unix | wc -l`.to_i 

Cependant, en utilisant la bibliothèque roo peut être très lent pour les gros fichiers:

e = Excel.new(filepath) 
e.last_row 

Mon expérience avec les formats de fichier Excel est nul, donc Je fais appel à l'OS Masses: comment puis-je essayer d'estimer le nombre de lignes qu'un fichier XLS, XLSX ou ODS contient en utilisant uniquement des programmes Ruby et/ou UNIX standard? Mon objectif est de pouvoir traiter des fichiers de 5 Mo en moins de 1,5 seconde (donner ou prendre du matériel divers).

Répondre

1
+0

Si je comprends bien, roo utilise réellement Parseexcel sous le capot. Dans les deux cas, le problème est que la lecture de gros fichiers Excel (plus de quelques centaines de Ko) prend trop de temps, au moins dans Ruby. J'imagine que la solution sera d'estimer le nombre de lignes sans lire et analyser correctement le fichier - peut-être en étant en mesure de grep pour un séparateur de ligne ou un identifiant dans le format de fichier binaire. – Tyson

+0

Désolé, mais à part ça, la seule chose à laquelle je peux penser est de vérifier le format du fichier xls http://www.wotsit.org/ – Jacob

1

Je travaille avec spreadsheet gem, donnez-moi un coup de feu.

+0

roo utilise une feuille de calcul en interne. –

Questions connexes