高效读取excel的gem-----creek
- 先大家推荐一款高效读取excel的gem,其实下载excel的gem有很多,但是读取excel的gem比较少。而其中最高效、最cool的就是这一款gem-------creek,一听名字就很cool哈哈,拉风,其官方github地址如下:
- creek: https://github.com/pythonicrubyist/creek
- 其实github上写的比较权威了,我简单说下我的实际使用,这个gem使用起来明显高效很多,我遍历1万多行的数据,大约执行了1分钟左右,其余的gem基本就卡死了
安装:
- gem install creek
地球人都知道,进入下一话题:
一个官方的demo:基本说明了gem的用法,但是具体输出每一行的数据,我没有看到怎么输出,我就研究了一下,用了个笨方法,如果大家有好的方法,欢迎告知,谢谢谢谢,
require 'creek'
creek = Creek::Book.new 'spec/fixtures/sample.xlsx'
sheet = creek.sheets[0]
sheet.rows.each do |row|
puts row # => {"A1"=>"Content 1", "B1"=>nil, "C1"=>nil, "D1"=>"Content 3"}
end
sheet.simple_rows.each do |row|
puts row # => {"A"=>"Content 1", "B"=>nil, "C"=>nil, "D"=>"Content 3"}
end
sheet.rows_with_meta_data.each do |row|
puts row # => {"collapsed"=>"false", "customFormat"=>"false", "customHeight"=>"true", "hidden"=>"false", "ht"=>"12.1", "outlineLevel"=>"0", "r"=>"1", "cells"=>{"A1"=>"Content 1", "B1"=>nil, "C1"=>nil, "D1"=>"Content 3"}}
end
sheet.simple_rows_with_meta_data.each do |row|
puts row # => {"collapsed"=>"false", "customFormat"=>"false", "customHeight"=>"true", "hidden"=>"false", "ht"=>"12.1", "outlineLevel"=>"0", "r"=>"1", "cells"=>{"A"=>"Content 1", "B"=>nil, "C"=>nil, "D"=>"Content 3"}}
end
sheet.state # => 'visible'
sheet.name # => 'Sheet1'
sheet.rid # => 'rId2'
具体某一行、一列读取
- 之前有个需求要从excel读取数据导入到数据库,我就读取遍历了一下,用的感觉挺笨的方法,但是也实现了,先把sheet.rows这个数组遍历出row和索引,因为第一行是标题,所以我跳过了读取,只读A、B两列的从一行号开始的数据
- 下面源码奉上:小弟告辞!
file_path = "#{Rails.root}/public/xxx.xlsx"
creek = Creek::Book.new file_path
sheet = creek.sheets[0]
puts sheet.rows.count
sheet.rows.each_with_index do |row, index|
next if index == 0
name = row["B#{index + 1}"]
mobile = row["A#{index + 1}"]
end
-------每日感悟-------
光想不做你永远都是纸上谈兵,实践出真知!