用JRuby读取Excel文件

最近经常要替客户做一些二次开发,其中要涉及到数据间的转换,这是客户就会发来一个Excel文件,其中记录着数据间的关系,比如:001代表经理等,而我将这些数据转成其它的形式,如:php的array形式或放到一个数据库表中等等。
Ruby则是我处理这类事的利器,它内置了CSV的操作,可以轻松处理表格数据,以前,我经常将客户发给我的Excel另存为CSV,然后处理,我非常喜欢CSV类库读取文件的语法,感觉它非常的优美,当然,Ruby类库的语法都很舒服,写Ruby这是享受。

CSV.open("code.csv","r") do |row|
#process each csv row
end


直到一个客户,它的数据转换信息很多,在一个Excel中,不同的转换内容放在不同的Sheet中,我要将sheet一个个另存为csv,然后处理?No,于是我想还是找一个处理Excel的类库,由于我比较熟悉Java,找到了JXL类库。并通过JRuby调用JXL完成转换。代码如下:

require 'java'
require 'jar/jxl.jar'

def jxl
Java::Jxl
end

import jxl.Workbook
import jxl.Sheet
import jxl.Cell

cities=[]
workbook=Workbook.getWorkbook(java.io.File.new("Customer_Desc.xls"))
sheet=workbook.getSheet(0)
rownum=sheet.getRows
0.upto(rownum-1) do |i|
#process each row
cells=sheet.getRow(i)
cells.each{|cell|
#process each cell
}
end
workbook.close



真是不舒服,比起CSV类库的写法,这太丑了,于是我对JXL进行了封装,使其尽量和CSV类库操作相一致,现在封装效果如下:

Excel.open("Customer_Desc.xls") do |wb|
wb.each{|sheet|
sheet.each{|row|
#process with each row
}
}

wb.current_sheet.each{|row|
#process with each row
}

wb.sheet(sheetnum or sheetname).each{|row|
#process with each row
}
end

由于我只用到了Excel的读取,就没有将写入Excel做封装,对Cell的处理,也仅仅是通过getContent函数把它变成字符串,没有办法处理超链接等特殊的格式,不过对我而言,够用就好 :arrow: 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值