使用ruby来操作excel文件 Win32ole

备注一个:

删除sheet时,请注意一个参数
excel.DisplayAlerts = false,否则会被提示信息block了 参考
测试工作中,批量的数据通常会放到excel表格中,测试输出的数据写回表格中,这样输入输出易于管理,同时清晰明了,

使用ruby来操作excel文件首先需要在脚本里包含以下语句
Ruby代码
  1. require 'win32ole'  
把win32ole包含进来后,就可以通过和windows下的excel api进行交互来对excel文件进行读写了.


打开excel文件,对其中的sheet进行访问:
Ruby代码
  1. excel = WIN32OLE::new('excel.Application')   
  2. workbook = excel.Workbooks.Open('c:\examples\spreadsheet.xls')   
  3. worksheet = workbook.Worksheets(1) #定位到第一个sheet  
  4. worksheet.Select  

读取数据:
Ruby代码
 
  1. worksheet.Range('a12')['Value'#读取a12中的数据  
  2. data = worksheet.Range('a1:c12')['Value'#将数据读入到一个二维表  
找到第一处a列的值为空值
Ruby代码
 
  1. line = 1   
  2. while worksheet.Range("a#{line}")['Value']   
  3.    line=line+1   
  4. end #line的值为第一处空白行的行数  
将第一列的值读入到一个数组中
Ruby代码
 
  1. line = '1'  
  2. data = []   
  3. while worksheet.Range("a#{line}")['Value']   
  4.    data << worksheet.Range("a#{line}:d#{line}")['Value']   
  5.    line.succ!   
  6. end  
将数据写入到excel表格中
Ruby代码
  1. worksheet.Range('e2')['Value'] = Time.now.strftime '%d/%m/%Y' #单个值  
  2. worksheet.Range('a5:c5')['Value'] = ['Test''25''result'#将一个数组写入  
调用宏定义
Ruby代码
  1. excel.Run('SortByNumber')  
设置背景色
Ruby代码
  1. worksheet.Range('a3:f5').Interior['ColorIndex'] = 36 #pale yellow  
  2. # 将背景色恢复成无色   
  3. worksheet.Range('a3:f5').Interior['ColorIndex'] = -4142 # XlColorIndexNone constant  
  4. # 使用Excel constant 将背景色恢复成无色   
  5. worksheet.Range('a3:f5').Interior['ColorIndex'] = ExcelConst::XlColorIndexNone  
保存
Ruby代码
  1. workbook.Close(1)   
  2. # 或   
  3. workbook.SaveAs 'myfile.xls'  
  4. # 默认路径是系统定义的"我的文档"  
结束会话
Ruby代码
  1. excel.Quit  
一些相对完整的代码片段

创建一个excel文件并保存
Ruby代码
  1. require 'win32ole'  
  2. excel = WIN32OLE.new("excel.application")   
  3. excel.visible = true     # in case you want to see what happens  
  4. workbook = excel.workbooks.add   
  5. workbook.saveas('c:\examples\spreadsheet1.xls')   
  6. workbook.close  

操作excel文件的几个重要元素
Excel => workbook => worksheet => range(cell)
我理解的是excel为类名,workbook为一个具体的(excel文件)实例,创建好实例后,worksheet是实例(workbook,工作簿)中的一个工作表,然后可

以对工作表中的每个单元格(range(cell))进行具体的读写------------------按照这样操作肯定没有错,不过下面的这些语句又让我有些疑惑


Ruby代码
  1. excel.workbooks("Mappe1").worksheets("Tabelle1").range("a1").value #读取名为Mappe1的excel文件中工作表名为Tabelle1的a1单元格中的值  
  2. excel.worksheets("Tabelle1").range("a1").value #作用同第一条语句  
  3. excel.activeworkbook.activesheet.range("a1").value #作用同第一条语句  
  4. excel.activesheet.range("a1").value #作用同第一条语句  
  5. excel.range("a1").value #作用同第一条语句  
excel可以直接操作所有的属性,默认为当前活跃的工作簿/工作表


对单元格的操作:

某个单元格: sheet.range("a1")

a1到c3的值:   sheet.range("a1", "c3") 或 sheet.range("a1:c3")

第一列:    sheet.range("a:a")

第三行:    sheet.range("3:3")

获得单元格的值:
Ruby代码
  1. range.text #读取值,返回为字符串格式,如果单元格内为数字,有可能会被截断小数点后的位数  
  2. sheet.range("a1").text     
  3.   
  4. range.value #读取值,数字不会截断   
  5. sheet.range("a1").value        
对单元格设置值
Ruby代码
  1. sheet.range("a1").value = 1.2345   
  2. #或   
  3. sheet.range("a1").value = '1.2345'  
迭代访问:

Ruby代码
      sheet.range("a1:a10").each{|cell|puts cell.value}  
如果范围是一个矩形,则会按行循环迭代访问
Ruby代码
  1. sheet.range("a1:b5").each{|cell|puts cell.value}  
block迭代,并打印出每行的第一个值
Ruby代码
  1. sheet.range("b3:c7").rows.each{|r|puts r.cells(1,1).value}  
参考:
http://www.pha.com.au/kb/index.php/Windows_OLE_Automation_in_Ruby
http://rubyonwindows.blogspot.com/2008_01_01_archive.html

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值