Gem 给大家推荐一个好用的 excel 读写的 gem

18810625123 · 发布于 2017年06月05日 · 最后由 zgt 回复于 2017年10月09日 · 1186 次阅读
30315

介绍:

  • 主要使用Ld::Excel类
  • 可以读取一个excel文件,先Ld::Excel.open(文件路径),再read({sheet:'sheetname',scope:'a1:b2'})即可读取出sheetname中a1~b2这个范围中的数据,返回的是二维数组
  • 可以创建一个新的excel文件,使用Ld::Excel.create(file_path:'/dir/excelfile.xls'){|excel| excel.write_sheet}。写excel需要传一个&block,这个block中的代码是告诉gem写什么sheet以及内容

安装:

1、在Gemfile中添加

gem 'ld'

2、运行bundle install

bundle install

用法:

  • 写excel文件,如下代码可以写一个新的excel。只需要告诉Ld::Excel要把文件写到哪(file_path),然后在里面可以创建任意多个sheet页(使用excel.write_sheet方法)。写sheet只需要设置内容sheet.set_rows()传入二维数组,即可。执行完后会将xls文件写到指定的地方。当然还可以使用set_format设置字体,通过set_point设置内容从哪个位置开始写,通过set_headings设置标题(这个数组会写到内容的第一行)
Ld::Excel.create :file_path => 'config/excel_test.xls' do |excel|
  excel.write_sheet 'abc' do |sheet| # 这是设置 sheet的名称的
    sheet.set_format({color: :red, font_size: 20, font: '微软雅黑'}) # 这一行可以不用,不设置就是excel默认的颜色 字体与字体大小
    sheet.set_point 'a1'  # 这个也可以不用, 默认就是 'a1'
    sheet.set_headings ['A','B','C','D']  # 这个标题也可以不用,
    sheet.set_rows([  # set_rows 必须传入一个二维数组,写法是从左至右,从上至下,
      ['1','2','3','4'],
      ['2','3','4','5'],
      ['3','4','5','6'],
      ['4','5','6','7']
    ])
  end
end
  • 创建成功的excel如下,sheet名是'abc',内容从a1单元格开始,标题为 ['A','B','C','D']

  • 读excel文件,返回二维数组
excel = Ld::Excel.open('config/excel_test.xls')
excel.read sheet: 'abc', scope:'A1:B5'
  • 如果需要连坐标一起返回,可以这样:(指定 location: true
excel.read sheet: 'abc', scope:'A1:B5', location: true
  • 如果要多读一列,可以这样
excel.read sheet: 'abc', scope:'A1:B5', add: 'C'
  • 如果要多读一行,可以这样
excel.read sheet: 'abc', scope:'A1:B5', add: '6'
  • 这是在rails console中读取一个文件的效果,返回的是一个二维数组

rubygems.org链接

https://rubygems.org/gems/ld

github项目源码 与文档

https://github.com/18810625123/ld

联系方式,技术支持

  • QQ 370182106
  • 微信 18810625123
  • star我的github项目可在更新gem时会收到通知。觉得好用的朋友们别忘了分享给小伙伴们哦 😄
共收到 11 条回复
96

基于‘ spreadsheet’的吗

A908ae

ld这名字居然还没有被用。。。

30315
32ad583255925 回复

是的

30315
A908aeadamshen 回复

哈哈, ld是我名字前缀, 很幸运呀, 居然没被用 - -

E8ebf1

电话号码应该是你幸运数字,因为昵称都是这个😆

7楼 已删除
24730

立马star一下

30315

最近重构了代码,应该会更加好用一些

22325
3031518810625123 回复

楼主,用了下,确实挺好使的,但是有点问题,已经提交了issue,等哪天有空了再提个pr😂 ,顺便问问能不能哪天扩展下功能读写全系列的office☺

30315
22325zxzllyj 回复

更新了0.4.5版, 新增 read_row 方法:

excel = Ld::Excel.open(file_path)
sheet = excel.open_sheet(sheet_name)
line = sheet.read_row(num)
20782

@18810625123 能读取表格中的图片么?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册