Ich versuche, eine Excel-Tabelle mit Ruby zu lesen, aber der Inhalt der Datei wird nicht gelesen.
Das ist mein Drehbuch
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
Es gibt mir Folgendes:
[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
Ich muss den tatsächlichen Inhalt der Datei erhalten. Was mache ich falsch?
Es sieht so aus, als wäre row
, dessen Klasse Spreadsheet::Excel::Row
ist, effektiv eine Excel-Range
, und dass sie entweder Enumerable enthält oder zumindest einige aufzählbare Verhaltensweisen wie #each
verfügbar macht.
Sie könnten Ihr Skript also etwa so umschreiben:
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
Beachten Sie, dass ich Argumente in Klammern gesetzt habe, was heutzutage generell ratsam ist, und die Semikolons entfernt. Diese sind nicht erforderlich, es sei denn, Sie schreiben mehrere Anweisungen in einer Zeile (was Sie - wenn überhaupt - selten tun sollten).
Es ist wahrscheinlich ein Kater von einem größeren Skript, aber ich möchte darauf hinweisen, dass in dem angegebenen Code die Variablen book
und sheet1
nicht wirklich benötigt werden und dass Spreadsheet#open
eine Blockierung benötigt, sodass eine idiomatische Ruby-Version etwa so aussehen könnte:
require 'spreadsheet'
Spreadsheet.open('MyTestSheet.xls') do |book|
book.worksheet('Sheet1').each do |row|
break if row[0].nil?
puts row.join(',')
end
end
Ich denke nicht, dass Sie Parseexcel benötigen, nur require 'spreadsheet'
Haben Sie den guide gelesen, so ist es sehr leicht zu folgen.
Ist es eine einzeilige Datei? Wenn ja, brauchen Sie:
puts row[0];