前言

本文只是对工作中常用的EOM相关函数的整理,并不是要写个大而全的操作手册,如果想对EOM有更多的了解可以参考QTP的帮助文档或查看QTP安装目录\CodeSamplesPlus\UsingExcel.vbs文件。

自动化测试中,为了达到数据与脚本分离的目的,我们需要一种能够统一管理测试数据的工具。QTP自带的DataTable非常好用,但是不利于管理和维护,这时候Excel就进入了我们的视线,QTP提供了对Excel的强大支持,通过EOM(Excel Automation Object Model)即Excel自动化对象模型来对Excel进行操作,下面就介绍一下我在工作中经常用到的Excel操作函数,也当作一次整理和总结。

写单元格

  • 功能:完成对Excel中指定单元格的写入

  • 参数:路径,sheet,单元格行号列号,需写入的值

在D盘根目录下新建qtp.xlsx文件。

  1. '向Excel中指定单元格写入数据
  2. Function write_cell(filename,sheetname,number_of_row,number_of_column,value)
  3.  
  4. 'filename:Excel完整路径
  5. 'sheetname:sheet名称
  6. Dim excelapp,excelsheet,excelbook
  7. '生成Excel对象
  8. set excelapp=createobject("Excel.Application")
  9. '打开Excel
  10. set excelbook=excelapp.WorkBooks.open(filename)
  11. '切换sheet
  12. Set excelsheet=excelbook.Worksheets(sheetname)
  13. '写入值
  14. excelsheet.cells(number_of_row,number_of_column)=value
  15. '保存退出Excel
  16. excelapp.Workbooks().Save
  17. excelapp.Workbooks().Close
  18. excelapp.Quit
  19. Set excelapp=nothing
  20. End Function
  21.  
  22. write_cell "D:\qtp.xlsx","sheet1",,,"hello,qtp"

执行后Excel中第一行第一列的值已设置

设置单元格样式

  • 功能:设置单元格的颜色、字体等

  • 参数:路径,sheet,单元格行号列号,字体颜色,背景颜色,对齐方式,字体,字号

  1. Function set_style(filename,sheetname,number_of_row,number_of_column,font_index,back_index,align,font_name,font_size)
  2. Dim excelapp,excelsheet,excelbook
  3. set excelapp=createobject("Excel.Application")
  4. set excelbook=excelapp.WorkBooks.open(filename)
  5. Set excelsheet=excelbook.Worksheets(sheetname)
  6. '设置背景色
  7. excelsheet.Cells(number_of_row,number_of_column).Interior.ColorIndex=back_index
  8. '设置字体颜色
  9. excelsheet.Cells(number_of_row,number_of_column).Font.ColorIndex=font_index
  10. '设置字体类型
  11. excelsheet.Cells(number_of_row,number_of_column).Font.Name=font_name
  12. '设置字体大小
  13. excelsheet.Cells(number_of_row,number_of_column).Font.Size=font_size
  14. '设置单元格排列方式
  15. excelsheet.Cells(number_of_row,number_of_column).HorizontalAlignment=align
  16. '保存关闭Excel
  17. excelapp.Workbooks().Save
  18. excelapp.Workbooks().Close
  19. excelapp.Quit
  20. End Function
  21.  
  22. '红色背景,黄色字体,居中显示,微软雅黑18号字体
  23. set_style "D:\qtp.xlsx","sheet1",,,,,,"微软雅黑",

效果图,关于颜色的Index值可以参考颜色index列表

写多行多列

  • 功能:有时测试中需要大批量的写入数据,每个单元格独立写入耗时耗力,通过数组形式一次写入则方便许多

  • 参数:路径,sheet,写入的数组

  1. '写多行多列
  2. Function write_multiple(filename,sheetname,arr)
  3.  
  4. 'filename:Excel完整路径
  5. 'sheetname:sheet名称
  6. Dim excelapp,excelsheet,excelbook
  7. '生成Excel对象
  8. set excelapp=createobject("Excel.Application")
  9. '打开Excel
  10. set excelbook=excelapp.WorkBooks.open(filename)
  11. '切换sheet
  12. Set excelsheet=excelbook.Worksheets(sheetname)
  13. '写入值
  14. For i= to ubound(arr,)
  15. For j= to ubound(arr,)
  16. excelsheet.cells(i,j)=arr(i,j)
  17. Next
  18. Next
  19. '保存退出Excel
  20. excelapp.Workbooks().Save
  21. excelapp.Workbooks().Close
  22. excelapp.Quit
  23. Set excelapp=nothing
  24. End Function
  25.  
  26. '定义二维数组
  27. Dim arr(,)
  28. arr(,)="hello"
  29. arr(,)="qtp"
  30. arr(,)="hi"
  31. arr(,)="test"
  32. '写入Excel
  33. write_multiple "D:\qtp.xlsx","sheet1",arr

读取Excel文件以数组形式返回

  • 功能:以二维数组的形式返回Excel中的数据

  • 参数:路径,sheet

  1. '读取Excel文件,以数组形式返回
  2. Function read_excel(filename,sheetname)
  3. Dim excelapp,excelsheet,excelbook,number_of_row,number_of_column,arr()
  4. set excelapp=createobject("Excel.Application")
  5. excelapp.DisplayAlerts=Flase
  6. set excelbook=excelapp.WorkBooks.open(filename)
  7. Set excelsheet=excelbook.Worksheets(sheetname)
  8. '获得当前sheet总行数和列数
  9. number_of_row=excelsheet.UsedRange.Rows.Count
  10. number_of_column=excelsheet.UsedRange.Columns.Count
  11. '设置数组范围
  12. ReDim arr(number_of_row,number_of_column)
  13. '将当前sheet中的数据放入数组
  14. For i= to number_of_row
  15. For j= to number_of_column
  16. arr(i,j)=excelsheet.cells(i,j)
  17. Next
  18. Next
  19.  
  20. read_excel=arr
  21. '保存关闭Excel
  22. excelapp.Workbooks().Save
  23. excelapp.Workbooks().Close
  24. excelapp.DisplayAlerts=true
  25. excelapp.Quit
  26. End Function
  27.  
  28. Dim data
  29. data=read_excel("D:\qtp.xlsx","sheet1")
  30. For i= to ubound(data,)
  31. For j= to ubound(data,)
  32. print "第"&i&"行第"&j&"列="&data(i,j)
  33. Next
  34. Next

获取数据在Excel中的起始和结束行号

  • 功能:获取字符串在Excel中开始和结束的行号

  • 参数:路径,sheet,匹配字符串

  1. '匹配脚本名称在Excel‘中占几行
  2. Function get_range(filename,sheetname,pattern_str)
  3. Dim excelapp,excelsheet,excelbook,number_of_row,arr(),number_of_begin,number_of_end,reg
  4. '设置数组范围
  5. ReDim arr(,)
  6. set excelapp=createobject("Excel.Application")
  7. excelapp.DisplayAlerts=Flase
  8. set excelbook=excelapp.WorkBooks.open(filename)
  9. Set excelsheet=excelbook.Worksheets(sheetname)
  10. '获得当前sheet总行数
  11. number_of_row=excelsheet.UsedRange.Rows.Count
  12. '生成正则表达式对象
  13. Set reg=new RegExp
  14. reg.Pattern=pattern_str
  15. reg.IgnoreCase=false
  16.  
  17. '查找开始及终止行数
  18. For i= to number_of_row
  19. if reg.Test(excelsheet.cells(i,)) then
  20. number_of_begin=i
  21. For j=number_of_begin to number_of_row
  22. if not reg.Test(excelsheet.cells(j,)) then
  23. number_of_end=j-
  24. Exit for
  25. End if
  26. If j=number_of_row Then
  27. number_of_end=number_of_row
  28. End If
  29. Next
  30. Exit for
  31. End if
  32. Next
  33.  
  34. '起始行数
  35. arr(,)=number_of_begin
  36. '结束行数
  37. arr(,)=number_of_end
  38. get_range=arr
  39. '保存关闭Excel
  40. excelapp.Workbooks().Save
  41. excelapp.Workbooks().Close
  42. excelapp.DisplayAlerts=true
  43. excelapp.Quit
  44.  
  45. End Function

将qtp.xlsx中写入如下内容

调用函数查找test开头的字符串在文件中的起止行号

  1. Dim begin_end
  2. begin_end=get_range("D:\qtp.xlsx","sheet1","test[0-9]+")
  3. print "从第"&begin_end(,)&"行开始到第"&begin_end(,)&"行结束"

Excel操作类

如果对某一Excel的操作很集中,可以将对Excel的操作写成类的形式

  1. Class OperateExcel
  2.  
  3. Public filename,sheetname,excelapp,excelsheet,excelbook
  4. '实现构造方法,类实例化时自动执行
  5. Public default Function initilize(path,name)
  6. filename=path
  7. sheetname=name
  8. setExcelModel
  9. set initilize=Me
  10. End Function
  11.  
  12. Private function setExcelModel()
  13. set excelapp=createobject("Excel.Application")
  14. set excelbook=excelapp.WorkBooks.open(filename)
  15. Set excelsheet=excelbook.Worksheets(sheetname)
  16. End Function
  17.  
  18. Function writeCell(number_of_row,number_of_column,value)
  19. excelsheet.cells(number_of_row,number_of_column)=value
  20. End Function
  21.  
  22. Function setColor(number_of_row,number_of_column,back_index)
  23. '设置指定单元格背景颜色
  24. excelsheet.Cells(number_of_row,number_of_column).Interior.ColorIndex=back_index
  25. End Function
  26.  
  27. Function readExcel
  28. content
  29. ...
  30. End Function
  31. .....
  32.  
  33. Function closeExcel
  34. '保存关闭Excel
  35. excelapp.Workbooks().Save
  36. excelapp.Workbooks().Close
  37. excelapp.Quit
  38. End Function
  39.  
  40. End Class
  41.  
  42. Function get_class(excelname,sheet)
  43. set get_class=(new OperateExcel)(excelname,sheet)
  44. End Function

这样使用起来很方便,只要记得在操作完成后调用关闭方法就可以了

  1. Dim o_e
  2. set o_e=get_class("D:\qtp.xlsx","sheet1")
  3. o_e.writeCell ,,"kddddkk"
  4. o_e.setColor ,,
  5. '关闭Excel对象
  6. o_e.closeExcel

工作中常用的QTP操作Excel函数的更多相关文章

  1. 工作中常用Git指令操作

    常用Git指令总结 前阵子有几天好不顺,可谓是喝水都呛着,更何况被Git给呛着了,还不轻,哈哈.所以打算总结一下自己在工作使用到Git相关的东西以及和大家探讨使用GIt的心得体会.于是,关于Git的的 ...

  2. 工作中常用的mysql操作

    一.在一个数据库中定义的存储过程或者是函数在另一数据库的存储过程中引用 1.我首先在数据库player_db中构建了一个函数:p_exp_to_level BEGIN ; ; RETURN v_lev ...

  3. 工作中常用的Git操作--------(一)

    今天主要记录一下平常工作当中使用的git操作: 1.git的安装这里省略: 2.git的操作指令: 在项目开发中,经常是拉去经理已经搭建好的一个项目,也就是给我们一个git地址.比如:http://g ...

  4. 工作中常用的Git操作

    粘贴自:微信公众号:程序员共成长 分支操作: git branch 创建分支 git branch -b 创建并切换到新建的分支上 git checkout 切换分支 git branch 查看分支列 ...

  5. git工作中常用操作总结

    这篇文章主要记录下工作中常用的git操作.主要是对之前文章记录的问题做个总结,这个其实在idea中操作更加简单 别名配置 在敲git 命令时,其实可以使用别名,比如 commit可以配置为ci 下面是 ...

  6. LoadRunner中常用的字符串操作函数

    LoadRunner中常用的字符串操作函数有:                strcpy(destination_string, source_string);               strc ...

  7. QTP操作excel文档

    对于QTP操作excel的大前提是,保证组建服务里的DCOM配置里存在 microsoft excel application ,具体的查看方式是,在运行框中输入dcomcnfg,然后会打开组件服务的 ...

  8. 工作中常用的js、jquery自定义扩展函数代码片段

    仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...

  9. 收集一些工作中常用的经典SQL语句

    作为一枚程序员来说和数据库打交道是不可避免的,现收集一下工作中常用的SQL语句,希望能给大家带来一些帮助,当然不全面,欢迎补充! 1.执行插入语句,获取自动生成的递增的ID值 INSERT INTO ...

随机推荐

  1. 获取服务器端ip

    System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]

  2. 知识点摸清 - - function()——JavaScript 函数名后什么时候加括号,什么时候不

    加括号——调用函数 只要是要调用函数执行的,都必须加括号. 此时,function()实际上等于函数的返回值.(没有返回值也已经执行了函数体内的行为).就是说,只要加括号的,就代表将会执行函数体代码. ...

  3. IEqualityComparer 去重

    1.去除list里某重复字段值的数据(相当于group by) public class CorrController { //方法 public void DoGet() { List<tes ...

  4. CentOS7下配置Openvpn 2.3.12

    1.下载安装包 #wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.09.tar.gz#wget http://swupdate. ...

  5. 12XML(可扩展标记语言)

    XML:eXtensible Markup Language 什么是标记语言?什么是标记? 标记(Markup):文档中任何不想被打印输出的部分(不是真正的文档内容,联想读书时做的“读书笔记”,在旁边 ...

  6. [转]PHP取整函数:ceil,floor,round,intval的区别详细解析

    我们经常用到的PHP取整函数,主要是:ceil,floor,round,intval. 1.ceil -- 进一法取整 说明float ceil ( float value ) 返回不小于 value ...

  7. javascript基础学习(四)

    javascript之流程控制语句 学习要点: 表达式语句含义 选择语句:if.if...else.switch 循环语句:while.do...while.for.for...in 跳转语句:bre ...

  8. idea 配置node Run

    1.node 2.nodemon 支持热部署 3.supervisor  支持执部署

  9. JS判断终端(Android IOS)

    function getMobileOperatingSystem() { var userAgent = navigator.userAgent || navigator.vendor || win ...

  10. windows7 jdk 环境变量添加

    JAVA_HOME D:\Java;PATH %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\l ...