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

18810625123 · 2017年06月05日 · 最后由 zhou1_zhen2 回复于 2018年04月19日 · 4447 次阅读

介绍:

  • 主要使用 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 时会收到通知。觉得好用的朋友们别忘了分享给小伙伴们哦 😄

基于‘spreadsheet’的吗

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

adamshen 回复

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

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

7 楼 已删除

立马 star 一下

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

18810625123 回复

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

zxzllyj 回复

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

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

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

zgt 回复

读图片,还是用用 JAVA 写吧,用 JAVA 封装一个 jar 包就能解决。注意:图片不要压单元格线,过来人提示。

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