用心做人,用心做事!

QuickTest Plus帮助文档中EXCEL相关函数

上一篇 / 下一篇  2009-04-04 10:00:26 / 个人分类:QTP

QuickTest Plus帮助文档中EXCEL相关函数

打开QTP,test--settings--resources,将附件文件添加进去就可以使用相关函数了

?
Dim ExcelApp    'AsExcel.Application
Dim excelSheet  'AsExcel.worksheet
Dim excelBook   'AsExcel.workbook
Dim fso         'As scrīpting.FileSystemObject

' *********************************************************************************************
' 函数说明:创建一个Excel应用程序ExcelApp,并创建一个新的工作薄Workbook;
' 参数说明:无
' 调用方法:
'           CreateExcel()
' *********************************************************************************************

Function CreateExcel()
    Dim excelSheet
    Set ExcelApp = CreateObject("Excel.Application")
    ExcelApp.Workbooks.Add  
    ExcelApp.Visible = True
    Set CreateExcel = ExcelApp
End Function

' *********************************************************************************************
' 函数说明:关闭Excel应用程序;
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
' 调用方法:
'           CloseExcel(ExcelApp)
' *********************************************************************************************
Sub CloseExcel(ExcelApp)
    Set excelSheet = ExcelApp.ActiveSheet
    Set excelBook = ExcelApp.ActiveWorkbook
    Set fso = CreateObject("scrīpting.FileSystemObject")
    On Error Resume Next
    fso.CreateFolder "C:\Temp"
    fso.DeleteFile "C:\Temp\ExcelExamples.xls"
    excelBook.SaveAs "C:\Temp\ExcelExamples.xls"
    ExcelApp.Quit
    Set ExcelApp = Nothing
    Set fso = Nothing
    Err = 0
    On Error GoTo 0
End Sub

' *********************************************************************************************
' 函数说明:保存工作薄;
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
'          (2)workbookIdentifier:属于ExcelApp的工作薄名称;
'          (3)path:保存的路径;
' 返回结果:
'          (1)保存成功,返回字符串:OK
'          (2)保存失败,返回字符串:Bad Worksheet Identifier
' 调用方法:
'           ret = SaveWorkbook(ExcelApp, "Book1", "D:\Example1.xls")
' *********************************************************************************************
' 函数说明:保存工作薄;
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
'          (2)workbookIdentifier:属于ExcelApp的工作薄名称;
'          (3)path:保存的路径;
' 返回结果:
'          (1)保存成功,返回字符串:OK
'          (2)保存失败,返回字符串:Bad Worksheet Identifier
' 调用方法:
'           ret = SaveWorkbook(ExcelApp, "Book1", "D:\Example1.xls")
' *********************************************************************************************
Function SaveWorkbook(ExcelApp, workbookIdentifier, path) 'As String
    Dim workbook
    On Error Resume Next  '启用错误处理程序
    Set workbook = ExcelApp.Workbooks(workbookIdentifier)
    On Error GoTo 0   '禁用错误处理程序
    If Not workbook Is Nothing Then
        If path = "" Or path = workbook.FullName Or path = workbook.Name Then
            workbook.Save
        Else
            Set fso = CreateObject("scrīpting.FileSystemObject")
            '判断路径中是否已添加扩展名.xls
            If InStr(path, ".") = 0 Then
                path = path & ".xls"
            End If
            '删除路径下现有同名的文件
            On Error Resume Next
            fso.DeleteFile path
            Set fso = Nothing
            Err = 0
            On Error GoTo 0
           
            workbook.SaveAs path
        End If
        SaveWorkbook = "OK"
    Else
        SaveWorkbook = "Bad Workbook Identifier"
    End If
End Function
' *********************************************************************************************
' 函数说明:设置工作表excelSheet单元格的值
' 参数说明:
'          (1)excelSheet:工作表名称;
'          (2)row:的序号,第一列为1;
'          (3)column:行的序号,第一行为1;
'          (4)value:单元格要设置的值;
' 返回结果:
'          无返回值
' 调用方法:
'           SetCellValue excelSheet1, 1, 2, "test\"
' *********************************************************************************************
Sub SetCellValue(excelSheet, row, column, value)
    On Error Resume Next
    excelSheet.Cells(row, column) = value
    On Error GoTo 0
End Sub
'The GetCellValue returns the cell's value according to its row column and sheet
'excelSheet - theExcelSheet in which the cell exists
'row - the cell's row
'column - the cell's column
'return 0 if the cell could not be found
' *********************************************************************************************
' 函数说明:获取工作表excelSheet单元格的值
' 参数说明:
'          (1)excelSheet:工作表名称;
'          (2)row:的序号;
'          (3)column:行的序号;
' 返回结果:
'          (1)单元格存在,返回单元格值;
'          (2)单元格不存在,返回0;
' 调用方法:
'           set CellValue = GetCellValue(excelSheet, 1, 2)
' *********************************************************************************************
Function GetCellValue(excelSheet, row, column)
    value = 0
    Err = 0
    On Error Resume Next
    tempValue = excelSheet.Cells(row, column)
    If Err = 0 Then
        value = tempValue
        Err = 0
    End If
    On Error GoTo 0
    GetCellValue = value
End Function
' *********************************************************************************************
' 函数说明:获取并返回工作表对象
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
'          (2)sheetIdentifier:属于ExcelApp的工作表名称;
' 返回结果:
'          (1)成功:工作表对象Excel.worksheet
'          (1)失败:Nothing
' 调用方法:
'           Set excelSheet1 = GetSheet(ExcelApp, "Sheet Name")
' *********************************************************************************************
Function GetSheet(ExcelApp, sheetIdentifier)
    On Error Resume Next
    Set GetSheet = ExcelApp.Worksheets.Item(sheetIdentifier)
    On Error GoTo 0
End Function
' *********************************************************************************************
' 函数说明:添加一张新的工作表
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
'          (2)workbookIdentifier:属于ExcelApp的工作薄名称;
'          (2)sheetName:要插入的工作表名称;
' 返回结果:
'          (1)成功:工作表对象worksheet
'          (1)失败:Nothing
' 调用方法:
'           InsertNewWorksheet(ExcelApp, workbookIdentifier, "new sheet")
' *********************************************************************************************

Function InsertNewWorksheet(ExcelApp, workbookIdentifier, sheetName)
    Dim workbook 'AsExcel.workbook
    Dim worksheet 'AsExcel.worksheet

    '如果指定的工作薄不存在,将在当前激活状态的工作表中添加工作表
    If workbookIdentifier = "" Then
        Set workbook = ExcelApp.ActiveWorkbook
    Else
        On Error Resume Next
        Err = 0
        Set workbook = ExcelApp.Workbooks(workbookIdentifier)
        If Err <> 0 Then
            Set InsertNewWorksheet = Nothing
            Err = 0
            Exit Function
        End If
        On Error GoTo 0
    End If

    sheetCount = workbook.Sheets.Count  '获取工作薄中工作表的数量
    workbook.Sheets.Add , sheetCount '添加工作表
    Set worksheet = workbook.Sheets(sheetCount + 1)  '初始化worksheet为新添加的工作表对象

    '设置新添加的工作表名称
    If sheetName <> "" Then
        worksheet.Name = sheetName
    End If

    Set InsertNewWorksheet = worksheet
End Function

' *********************************************************************************************
' 函数说明:修改工作表的名称;
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
'          (2)workbookIdentifier:属于ExcelApp的工作薄名称;
'          (3)worksheetIdentifier:属于workbookIdentifier工作薄的工作表名称;
'          (4)sheetName:修改后的工作表名称;
' 返回结果:
'          (1)修改成功,返回字符串:OK
'          (2)修改失败,返回字符串:Bad Worksheet Identifier
' 调用方法:
'           set ret = RenameWorksheet(ExcelApp, "Book1", "Sheet1", "Sheet Name")
' *********************************************************************************************

Function RenameWorksheet(ExcelApp, workbookIdentifier, worksheetIdentifier, sheetName)
    Dim workbook
    Dim worksheet
    On Error Resume Next
    Err = 0
    Set workbook = ExcelApp.Workbooks(workbookIdentifier)
    If Err <> 0 Then
        RenameWorksheet = "Bad Workbook Identifier"
        Err = 0
        Exit Function
    End If
    Set worksheet = workbook.Sheets(worksheetIdentifier)
    If Err <> 0 Then
        RenameWorksheet = "Bad Worksheet Identifier"
        Err = 0
        Exit Function
    End If
    worksheet.Name = sheetName
    RenameWorksheet = "OK"
End Function

' *********************************************************************************************
' 函数说明:删除工作表;
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
'          (2)workbookIdentifier:属于ExcelApp的工作薄名称;
'          (3)worksheetIdentifier:属于workbookIdentifier工作薄的工作表名称;
' 返回结果:
'          (1)删除成功,返回字符串:OK
'          (2)删除失败,返回字符串:Bad Worksheet Identifier
' 调用方法:
'           set ret = RemoveWorksheet(ExcelApp, "Book1", "Sheet1")
' *********************************************************************************************

Function RemoveWorksheet(ExcelApp, workbookIdentifier, worksheetIdentifier)
    Dim workbook 'AsExcel.workbook
    Dim worksheet 'AsExcel.worksheet
    On Error Resume Next
    Err = 0
    Set workbook = ExcelApp.Workbooks(workbookIdentifier)
    If Err <> 0 Then
        RemoveWorksheet = "Bad Workbook Identifier"
        Exit Function
    End If
    Set worksheet = workbook.Sheets(worksheetIdentifier)
    If Err <> 0 Then
        RemoveWorksheet = "Bad Worksheet Identifier"
        Exit Function
    End If
    worksheet.Delete
    RemoveWorksheet = "OK"
End Function

' *********************************************************************************************
' 函数说明:添加新的工作薄
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
' 返回结果:
'          (1)成功:工作表对象NewWorkbook
'          (1)失败:Nothing
' 调用方法:
'          set NewWorkbook = CreateNewWorkbook(ExcelApp)
' *********************************************************************************************

Function CreateNewWorkbook(ExcelApp)
    Set NewWorkbook = ExcelApp.Workbooks.Add()
    Set CreateNewWorkbook = NewWorkbook
End Function

' *********************************************************************************************
' 函数说明:打开工作薄
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
'          (2)path:要打开的工作薄路径;
' 返回结果:
'          (1)成功:工作表对象NewWorkbook
'          (1)失败:Nothing
' 调用方法:
'          set NewWorkbook = CreateNewWorkbook(ExcelApp)
' *********************************************************************************************

Function OpenWorkbook(ExcelApp, path)
    On Error Resume Next
    Set NewWorkbook = ExcelApp.Workbooks.Open(path)
    Set ōpenWorkbook = NewWorkbook
    On Error GoTo 0
End Function

' *********************************************************************************************
' 函数说明:将工作薄设置为当前工作状态
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
'          (2)workbookIdentifier:要设置为当前工作状态的工作薄名称;
' 返回结果:无返回值;
' 调用方法:
'          ActivateWorkbook(ExcelApp, workbook1)
' *********************************************************************************************

Sub ActivateWorkbook(ExcelApp, workbookIdentifier)
    On Error Resume Next
    ExcelApp.Workbooks(workbookIdentifier).Activate
    On Error GoTo 0
End Sub

' *********************************************************************************************
' 函数说明:关闭Excel工作薄;
' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
'          (2)workbookIdentifier:
' 调用方法:
'           CloseWorkbook(ExcelApp, workbookIdentifier)
' *********************************************************************************************

Sub CloseWorkbook(ExcelApp, workbookIdentifier)
    On Error Resume Next
    ExcelApp.Workbooks(workbookIdentifier).Close
    On Error GoTo 0
End Sub

' *********************************************************************************************
' 函数说明:判断两个工作表对应单元格内容是否相等
' 参数说明:
'          (1)sheet1:工作表1的名称;
'          (2)sheet2:工作表2的名称;
'          (3)startColumn:开始比较的行序号;
'          (4)numberOfColumns:要比较的行数;
'          (5)startRow:开始比较的序号;
'          (6)numberOfRows:要比较的数;
'          (7)trimed:是否先除去字符串开始的空格和尾部空格后再进行比较,true或flase;
' 返回结果:
'          (1)两工作表对应单元格内容相等:true
'          (2)两工作表对应单元格内容不相等:flase         
' 调用方法:
'           ret = CompareSheets(excelSheet1, excelSheet2, 1, 10, 1, 10, False)
' *********************************************************************************************

Function CompareSheets(sheet1, sheet2, startColumn, numberOfColumns, startRow, numberOfRows, trimed)
    Dim returnVal 'As Boolean
    returnVal = True

    '判断两个工作表是否都存在,任何一个不存在停止判断,返回flase
    If sheet1 Is Nothing Or sheet2 Is Nothing Then
        CompareSheets = False
        Exit Function
    End If

    '循环判断两个工作表单元格的值是否相等
    For r = startRow to (startRow + (numberOfRows - 1))
        For c = startColumn to (startColumn + (numberOfColumns - 1))
            Value1 = sheet1.Cells(r, c)
            Value2 = sheet2.Cells(r, c)

            '如果trimed为true,去除单元格内容前面和尾部空格
            If trimed Then
                Value1 = Trim(Value1)
                Value2 = Trim(Value2)
            End If

            '如果单元格内容不一致,函数返回flase
            If Value1 <> Value2 Then
                Dim cell 'AsExcel.Range
                '修改sheet2工作表中对应单元格值
                sheet2.Cells(r, c) = "Compare conflict - Value was '" & Value2 & "', Expected value is '" & Value1 & "'."  
                '初始化cell为sheet2中r:c单元格对象
                Set cell = sheet2.Cells(r, c) '
                '将sheet2工作表中对应单元格的颜色设置为红色
                cell.Font.Color = vbRed  
                returnVal = False
            End If
        Next
    Next
    CompareSheets = returnVal
End Function
  • VBScript编码约定

    2008-2-13

    VBscrīpt编码约定

    编码约定是帮助您使用 Microsoft Visual Basic scrīpting Edition 编写代码的一些建议。编码约定包含以下内容:

    • 对象、变量和过程的命名约定
    • 注释约定
    • 文本格式和缩进指南

    使用一致的编码约定的主要原因是使脚本或脚本集的结构和编码样式标准化,这样代码易于阅读和理解。使用好的编码约定可以使源代码明白、易读、准确,更加直观且与其他语言约定保持一致。

    常数命名约定

    VBscrīpt 的早期版本不允许创建用户自定义常数。如果要使用常数,则常数以变量的方式实现,且全部字母大写以和其他变量区分。常数名中的多个单词用下划线 (_) 分隔。例如:

    USER_LIST_MAX
    NEW_LINE

    这种标识常数的方法依旧可行,但您还可以选择其他方案,用Const语句创建真正的常数。这个约定使用大小写混合的格式,并以“con”作为常数名的前缀。例如:

    conYourOwnConstant

    变量命名约定

    为提高易读和一致性,请在 VBscrīpt 代码中使用以下变量命名约定:

    子类型前缀示例
    BooleanblnblnFound
    BytebytbytRasterData
    Date (Time)dtmdtmStart
    DoubledbldblTolerance
    ErrorerrerrOrderNum
    IntegerintintQuantity
    LonglnglngDistance
    ObjectobjobjCurrent
    SinglesngsngAverage
    StringstrstrFirstName

    变量作用域

    变量应定义在尽量小的作用域中。VBscrīpt变量的作用域如下所示:

    作用域声明变量处可见性
    过程级事件、函数或子过程。在声明变量的过程中可见。
    scrīpt 级HTML 页面的 HEAD 部分,任何过程之外。在脚本的所有过程中可见。

    变量作用域前缀

    随着脚本代码长度的增加,有必要快速区分变量的作用域。在类型前缀前面添加一个单字符前缀可以实现这一点,而不致使变量名过长。

    作用域前缀示例
    过程级dblVelocity
    scrīpt 级ssblnCalcInProgress

    描述性变量名和过程名

    变量名或过程名的主体应使用大小写混合格式,并且尽量完整地描述其目的。另外,过程名应以动词开始,例如 InitNameArray 或 CloseDialog。

    对于经常使用的或较长的名称,推荐使用标准缩写以使名称保持在适当的长度内。通常多于 32 个字符的变量名会变得难以阅读。使用缩写时,应确保在整个脚本中保持一致。例如,在一个脚本或脚本集中随意切换 Cnt 和 Count 将造成混乱。

    对象命名约定

    下表出了 VBscrīpt 中可能用到的对象命名约定(推荐):

    对象类型前缀示例
    3D 面板pnlpnlGroup
    动画按钮anianiMailBox
    复选框chkchkReadOnly
    组合框、下拉列表框cbocboEnglish
    命令按钮cmdcmdExit
    公共对话框dlgdlgFileOpen
    框架frafraLanguage
    水平滚动条hsbhsbVolume
    图像imgimgIcon
    标签lbllblHelpMessage
    直线linlinVertical
    列表框lstlstPolicyCodes
    旋钮spnspnPages
    文本框txttxtLastName
    垂直滚动条vsbvsbRate
    滑块sldsldScale

    代码注释约定

    所有过程的开始部分都应有描述其功能的简要注释。这些注释并不描述细节信息(如何实现功能),这是因为细节有时要频繁更改。这样就可以避免不必要的注释维护工作以及错误的注释。细节信息由代码本身及必要的内部注释来描述。

    当传递给过程的参数的用途不明显,或过程对参数的取值范围有要求时,应加以说明。如果过程改变了函数和变量的返回值(特别是通过参数引用来改变),也应在过程的开始部分描述该返回值。

    过程开始部分的注释应包含以下区段标题。相关样例,请参阅后面的“格式化代码”部分。

    区段标题注释内容
    目的过程的功能(不是实现功能的方法)。
    假设其状态影响此过程的外部变量、控件或其他元素的列表。
    效果过程对每个外部变量、控件或其他元素的影响效果的列表。
    输入每个目的不明显的参数的解释。每个参数都应占据单独一行并有其内部注释。
    返回返回值的解释。

    请记住以下几点:

    • 每个重要的变量声明都应有内部注释,描述变量的用途。
    • 应清楚地命名变量、控件和过程,仅在说明复杂细节时需要内部注释。
    • 应在脚本的开始部分包含描述该脚本的概述,列举对象、过程、运算法则、对话框和其他系统从属物。有时一段描述运算法则的假码是很有用的。

    格式化代码

    应尽可能多地保留屏幕空间,但仍允许用代码格式反映逻辑结构和嵌套。以下为几点提示:

    • 标准嵌套块应缩进 4 个空格。
    • 过程的概述注释应缩进 1 个空格。
    • 概述注释后的最高层语句应缩进 4 个空格,每一层嵌套块再缩进 4 个空格。例如:
    '*********************************************************
    ' Purpose: Locates the first occurrence of a specified user
    '          in the UserList array.
    ' Inputs: strUserList(): the list of users to be searched.
    '         strTargetUser: the name of the user to search for.
    ' Returns: The index of the first occurrence of the strTargetUser
    '          in the strUserList array.
    '          If the target user is not found, return -1.
    '*********************************************************
    Function intFindUser (strUserList(), strTargetUser)
       Dim i   ' Loop counter.
       Dim blnFound   ' Target found flag
       intFindUser = -1
       i = 0   ' Initialize loop counter
       Do While i <= Ubound(strUserList) and Not blnFound
          If strUserList(i) = strTargetUser Then
             blnFound = True   ' Set flag to True
             intFindUser = i   ' Set return value to loop count
          End If
          i = i + 1   ' Increment loop counter
       Loop
    End Function

  • TAG:

     

    评分:0

    我来说两句

    Open Toolbar