J'essaie de lire une feuille de calcul Excel avec Ruby, mais ce n'est pas pour en lire le contenu.
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 ce qui suit:
[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
Je dois obtenir le contenu réel du fichier. Qu'est-ce que je fais mal?
Il ressemble à row
, dont la classe est Spreadsheet::Excel::Row
est en réalité un Excel Range
et qu’il inclut Enumerable ou expose au moins certains comportements énumérables, #each
, par exemple.
Donc, vous pourriez réécrire votre script à peu près 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 des arguments entre parenthèses, ce qui est généralement recommandé de nos jours, et que j'ai supprimé les points-virgules, qui ne sont pas nécessaires, sauf si vous écrivez plusieurs instructions sur une ligne (ce que vous devriez rarement - sinon jamais - faire).
C'est probablement une réaction d'un script plus volumineux, mais je soulignerai que dans le code, les variables book
et sheet1
ne sont pas vraiment nécessaires, et que Spreadsheet#open
prend un bloc, une version plus idiomatique de Ruby pourrait ressembler à 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
Je ne pense pas que vous ayez besoin de parseexcel, mais simplement require 'spreadsheet'
Avez-vous lu le guide , il est super facile à suivre.
Est-ce un fichier d'une ligne? Si oui vous avez besoin de:
puts row[0];