如何使用Ruby读取Excel电子表格的内容?

问题描述:

我正在尝试使用Ruby读取Excel电子表格文件,但它没有读取文件的内容。如何使用Ruby读取Excel电子表格的内容?

这是我的脚本

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 

这是给我下面的:

[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 

我需要得到文件的实际内容。我究竟做错了什么?

+0

你似乎在编写新的代码,所以我建议按照警告和使用'ParseExcel'库作为指示。并不是说我曾经使用过这两种方法,但是建立新的功能对我来说似乎是一个坏主意。 – 2010-07-22 14:21:39

+0

为什么它不显示内容。 – Pavunkumar 2010-07-22 14:27:42

它看起来像row,它的类是Spreadsheet::Excel::Row有效是Excel Range,它要么包括可枚举或至少暴露了一些可枚举的行为,#each,例如。

所以,你可能重写你的脚本是这样的:

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 

请注意,我parenthesised参数,这是通常建议这些天,并取消了分号,这是没有必要,除非你”重新写一条线上的多条语句(你应该很少 - 如果有的话)。

这可能从一个较大的脚本宿醉,但我会指出,在代码中给出的booksheet1变量不是真的需要,那Spreadsheet#open需要一个块,所以更地道的Ruby版本可能这样的事情:

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

你能告诉我如何计算excel表格的行数。 – khan 2015-06-11 13:14:19

它是单行文件吗?如果是这样,你需要:

puts row[0]; 
+0

这是1000行文件...我只是检查第一条记录.... – Pavunkumar 2010-07-22 14:26:05

我不认为你需要需要ParseExcel的,只是require 'spreadsheet'

你看了guide,它是超级容易。

+0

链接不起作用。 – 2014-07-02 09:37:20

+1

我更新了指向GitHub的链接。现在看来rubyforge已经下降了 – 2014-07-03 12:35:22