Comment lire le contenu d'une feuille de calcul Excel à l'aide de Ruby?
-
27-09-2020 - |
Question
Je suis en train de lire un fichier tableur Excel avec Ruby, mais il n'est pas de lire le contenu du fichier.
C'est mon script
book = Spreadsheet.open 'myexcel.xls';
sheet1 = book.worksheet 0
sheet1.each do |row|
puts row.inspect ;
puts row.format 2;
puts row[1];
exit;
end
Il me donne les éléments suivants:
[DEPRECATED] By requiring 'parseexcel', 'parseexcel/parseexcel' and/or
'parseexcel/parser' you are loading a Compatibility layer which
provides a drop-in replacement for the ParseExcel library. This
code makes the reading of Spreadsheet documents less efficient and
will be removed in Spreadsheet version 1.0.0
#<Spreadsheet::Excel::Row:0xffffffdbc3e0d2 @worksheet=#<Spreadsheet::Excel::Worksheet:0xb79b8fe0> @outline_level=0 @idx=0 @hidden=false @height= @default_format= @formats= []>
#<Spreadsheet::Format:0xb79bc8ac>
nil
J'ai besoin d'obtenir le contenu réel du fichier.Ce que je fais mal?
La solution
Il ressemble row
, dont la classe est Spreadsheet::Excel::Row
qui est effectivement un Excel Range
et qu'il soit inclut Énumérable ou, au moins, expose quelques énumérable comportements, #each
, par exemple.
Donc, vous pouvez réécrire votre script à quelque chose comme ceci:
require 'spreadsheet'
book = Spreadsheet.open('myexcel.xls')
sheet1 = book.worksheet('Sheet1') # can use an index or worksheet name
sheet1.each do |row|
break if row[0].nil? # if first cell empty
puts row.join(',') # looks like it calls "to_s" on each cell's Value
end
Notez que j'ai parenthesised arguments, ce qui est généralement conseillé de ces jours, et a supprimé les points-virgules, qui ne sont pas nécessaires, sauf si vous écrivez plusieurs instructions sur une ligne (ce qui devrait que rarement - voire jamais - ne).
C'est probablement une gueule de bois d'une plus grande script, mais je vais souligner que, dans le code de la book
et sheet1
les variables ne sont pas vraiment nécessaires, et que Spreadsheet#open
prend un bloc, de sorte qu'un plus idiomatiques version de Ruby pourrait être quelque chose comme ceci:
require 'spreadsheet'
Spreadsheet.open('MyTestSheet.xls') do |book|
book.worksheet('Sheet1').each do |row|
break if row[0].nil?
puts row.join(',')
end
end
Autres conseils
Je ne pense pas que vous ayez besoin de demander à Parseexcel, juste require 'spreadsheet'
Avez-vous lu la guide , il est super facile àSuivez.
est-ce un fichier d'une ligne?Si oui, vous avez besoin de:
puts row[0];