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

return · 发布于 2017年09月12日 · 最后由 return 回复于 2017年09月21日 · 283 次阅读
036fd5

想要读取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的数据类型如下:

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

共收到 7 条回复
910

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

036fd5
910robertyu 回复

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

非常感谢!

036fd5
910robertyu 回复

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

036fd5

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

Fd2b43

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

036fd5
Fd2b43zerzerheart 回复

是的,不知道为什么是空

036fd5

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

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
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册