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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top