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?

Était-ce utile?

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];

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top