Wie lese ich den Inhalt einer Excel-Tabelle mit Ruby?
-
27-09-2020 - |
Frage
Ich versuche, eine Excel-Tabellenkalkulationsdatei mit Ruby zu lesen, aber der Inhalt der Datei wird nicht gelesen.
Das ist mein Skript
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?
Lösung
Es sieht aus wie row
, wessen Klasse ist Spreadsheet::Excel::Row
ist effektiv ein Excel Range
und dass es entweder aufzählbare Verhaltensweisen enthält oder zumindest einige aufzählbare Verhaltensweisen aufdeckt, #each
, beispielsweise.
Sie könnten also Ihr Skript 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 im Allgemeinen ratsam ist, und die Semikolons entfernt habe, die nicht erforderlich sind, es sei denn, Sie schreiben mehrere Anweisungen in eine Zeile (was Sie selten - wenn überhaupt - tun sollten).
Es ist wahrscheinlich ein Kater von einem größeren Skript, aber ich werde darauf hinweisen, dass im Code das angegeben ist book
und sheet1
variablen werden nicht wirklich benötigt, und das Spreadsheet#open
nimmt einen Block, also könnte eine idiomatischere Ruby-Version ungefähr so aussehen:
require 'spreadsheet'
Spreadsheet.open('MyTestSheet.xls') do |book|
book.worksheet('Sheet1').each do |row|
break if row[0].nil?
puts row.join(',')
end
end
Andere Tipps
Ich glaube nicht, dass Sie Parseexcel benötigen, nur generakodicetagcode
Haben Sie den guide , es ist super einfach zufolgen.
ist es eine einzeilige Datei?Wenn ja, brauchst du:
generasacodicetagpre.