webentwicklung-frage-antwort-db.com.de

Wie lese ich den Inhalt einer Excel-Tabelle mit Ruby?

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?

14
Pavunkumar

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
20
Mike Woodhouse

Ich denke nicht, dass Sie Parseexcel benötigen, nur require 'spreadsheet'

Haben Sie den guide gelesen, so ist es sehr leicht zu folgen.

4
Bryan Ash

Ist es eine einzeilige Datei? Wenn ja, brauchen Sie:

puts row[0];
0
nicholasklick