2017-08-18 22 views
1

Ich bin neu in Ruby und RubyXL und habe (vielleicht) eine einfache Frage. Ich habe eine Excel-Datei, die ich mit RubyXL analysieren.rubyXL iterieren durch spezifische Spalte von xslx

dann möchte ich alle Werte aus der Spalte B in ein Array speichern. Und ich weiß nicht, wie ich das machen soll. Vielleicht kann mir jemand helfen?

@workbook = RubyXL::Parser.parse(path) 
. 
. 
. 
@excelColumnB = Array.new 
#only iterate column B (1)  
@workbook.worksheets[0].each[1] { |column| 
    column.cells.each { |cell| 
    val = cell && cell.value 
    excelColumnB.push(val) 
    puts val 
    } 
} 
return excelColumnB 

ich weiß, dass das Beispiel falsch ist. Ich habe viele Dinge ausprobiert.

Antwort

1

Die each[1] ist Ihr Hauptproblem. Sie können einen Iterator nicht auf diese Weise indexieren, er ist syntaktisch falsch. Die Blockvariable enthält eine Zeile, keine Spalte.

Versuchen Sie folgendes:

@workbook.worksheets[0].each { |row| 
    val = row[1].value 
    @excelColumnB << val 
    puts val 
} 

Aber ich empfehle eine prägnante Art und Weise Ihr Array zu erstellen:

@col_b = workbook.worksheets[0].collect {|row| row[1].value} 
+0

Es tut mir leid für die lange Wartezeit. Das hat perfekt funktioniert. Außerdem verstehe ich jetzt, wie das funktioniert. Danke vielmals. – Frost