¿Cómo leo el contenido de una hoja de cálculo de Excel con Ruby?

Estoy intentando leer un archivo de hoja de cálculo de Excel con Ruby, pero no está leyendo el contenido del archivo.

Este es mi guion

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 

Me está dando lo siguiente:

 [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=# @outline_level=0 @idx=0 @hidden=false @height= @default_format= @formats= []> # nil 

Necesito obtener el contenido real del archivo. ¿Qué estoy haciendo mal?

Parece una row , cuya clase es Spreadsheet::Excel::Row es efectivamente un Range Excel y que incluye Enumerable o al menos expone algunos comportamientos enumerables, #each , por ejemplo.

Así que podrías reescribir tu guión algo como esto:

 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 

Tenga en cuenta que he entre paréntesis los argumentos, que generalmente son recomendables en estos días, y que eliminé los puntos y comas, que no son necesarios a menos que esté escribiendo declaraciones múltiples en una línea (lo que rara vez debería hacer).

Probablemente sea una resaca de un script más grande, pero señalaré que en el código dado las variables de sheet1 y sheet1 realmente no son necesarias, y que Spreadsheet#open toma un bloque, por lo que una versión más idiomática de Ruby podría ser algo así como esta:

 require 'spreadsheet' Spreadsheet.open('MyTestSheet.xls') do |book| book.worksheet('Sheet1').each do |row| break if row[0].nil? puts row.join(',') end end 

No creo que necesite un parseexcel, solo require 'spreadsheet'

Has leído la guía , es muy fácil de seguir.

¿Es un archivo de una línea? Si es así necesitas:

 puts row[0]; 
    Intereting Posts