新手问题 Ruby 使用 Spreadsheet 解析 Excel 数据,row 总是为 nil

return · 2017年09月12日 · 最后由 return 回复于 2017年09月21日 · 3086 次阅读

想要读取 Excel 数据,按网上的一些教程,代码如下:

def sync_students
    # Spreadsheet::ParseExcel.parse("files/2017/09/副本lvyou.xls")
    Spreadsheet.client_encoding = "UTF-8"
    book = Spreadsheet.open("files/2017/09/副本lvyou.xls")
    sheet1 = book.worksheet 0
    sheet1.each do |row|
       row  # Empty Spreadsheet::Excel::Row
    end
end

但是,解析出来的 row 总是为空

Empty Spreadsheet::Excel::Row

其中 sheet1 的数据类型如下:

这是哪里出了问题? 希望大家帮忙看下,谢谢!

确定下数据是不是在 worksheet 0 里

robertyu 回复

其它的地方找了也没有,正常情况下应该是放在 worksheet 0 里面的吧 这是 book 的数据类型:

非常感谢!

robertyu 回复

被这个问题折腾的脑袋都大了😂 😂

麻烦大神帮我看看,谢谢了😁 😁 😁 @huacnlee @lgn21st @hooopo @Rei @lyfi2003

sheet1 的那张图的@ rows = Empty Array,说明 rows 里本来就没有数据啊。。。

zerzerheart 回复

是的,不知道为什么是空

换了中实现方法,可以很轻松的获取值:

gem 'simple_xlsx_reader'
lists = readData("files/#{path}/#{name}")
...
...
...
def readData(xlsx)
    doc = SimpleXlsxReader.open(xlsx)
    sheet = doc.sheets.first
    # 按实际需求自己处理吧
    sheet.rows.inject([]) { |l, row|
      if row.size >= 3 && row[1] && row[2]
        l << [row[1], row[2]]
      else
        l
      end
    }
  end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号