最近需要用ruby读取excel文件,网友有很多包,但是多少都会出现些问题,而且读取效率也不是很高。后来在论坛上看到有说用WIN32OLE读取excel文章,然后就试了一下。
发现效果还不错。但是缺点是无法自动结束excel程序。
所以没回执行完后 杀掉进程即可:
system("taskkill /f /im excel.exe")
class="java" name="code">
require 'win32ole'
require 'date'
require 'win32api'
def excelReader()
excel = WIN32OLE.new("excel.application")
excel.visible = false
filepath="D:\\auto_work\\Book1.xls" #路径用两斜杠
workbook = excel.workbooks.open(filepath)
worksheet=workbook.worksheets(1)
#worksheet=workbook.worksheets("sheet name") 打开表名
#读取excel文件
return_data=[]
config_data=[]
config_data1=[]
taix_date=[]
taix_from=[]
taix_to=[]
taix_km=[]
taix_fee=[]
taix_reason=[]
row=3
13.times do
#读取单元格数据赋给数组
config_data << worksheet.range("b#{row}").value.to_s
row+=1
end
row=6
return_data<<config_data
8.times do
#读取单元格数据赋给数组
config_data1 << worksheet.range("c#{row}").value.to_s
row+=1
end
row=2
return_data<<config_data1
while worksheet.range("d#{row}").value
#读取出租车详细日期
taix_date << worksheet.range("d#{row}").value.strftime("%Y-%m-%d")
row+=1
end
row=2
return_data<<taix_date
while worksheet.range("e#{row}").value
#读取单元格数据赋给数组
taix_from << worksheet.range("e#{row}").value.to_s
row+=1
end
row=2
return_data<<taix_from
while worksheet.range("f#{row}").value
#读取单元格数据赋给数组
taix_to << worksheet.range("f#{row}").value.to_s
row+=1
end
row=2
return_data<<taix_to
while worksheet.range("g#{row}").value
#读取单元格数据赋给数组
taix_km << worksheet.range("g#{row}").value.to_s
row+=1
end
row=2
return_data<<taix_km
while worksheet.range("h#{row}").value
#读取单元格数据赋给数组
taix_fee << worksheet.range("h#{row}").value.to_s
row+=1
end
row=2
return_data<<taix_fee
while worksheet.range("i#{row}").value
#读取单元格数据赋给数组
taix_reason << worksheet.range("i#{row}").value.to_s
row+=1
end
return_data<<taix_reason
return return_data
excel.close
system('taskkill -f -im excel.exe')
end