51Testing软件测试论坛

标题: 【已解决】QTP中操作Excel的函数求怎么调用的 [打印本页]

作者: lijingprince5    时间: 2013-2-4 12:30
标题: 【已解决】QTP中操作Excel的函数求怎么调用的
本帖最后由 黑羽祭 于 2013-2-7 08:42 编辑

Function SaveWorkBook(objExcelApp,workbookIdentifier,path)
        Dim workbook
        On error resume next
        Set  workbook=objExcelApp.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 objFso=createobject("Scripting.FileSystemObject")
                'if the path has no file extension than and the 'xlsx' extension
                If instr(path,".")=0 Then
                        path=path & ".xlsx"
                End If
                On error resume next
                objFso.DeleteFile path
                Set objFso=nothing
                Err=0
                On error goto 0
                workbook.SaveAs path
                End If
                SaveWorkBook="OK"
        else
        SaveWorkBook="Bad Workbook Identifier"
        End If
End Function

以上是在网上看到的一个函数,
最郁闷的是不知道这个函数怎么去调用呢.
请各位支招啊
作者: 赵佳乐SMILE    时间: 2013-2-4 13:28
********************************************************************************************* ' 函数说明:保存工作薄; ' 参数说明:
'          (1)ExcelApp:Excel应用程序名称;
'          (2)workbookIdentifier:属于ExcelApp的工作薄名称;
'          (3)path:保存的路径; ' 返回结果:
'          (1)保存成功,返回字符串:OK
'          (2)保存失败,返回字符串:Bad Worksheet Identifier
' 调用方法: '           ret = SaveWorkbook(ExcelApp, "Book1", "D:\Example1.xls") ' ****************
作者: 赵佳乐SMILE    时间: 2013-2-4 13:28
找资料 要找全啊。。。。

网上有很好的啊

http://wenku.baidu.com/view/5eae40d6360cba1aa811dae6.html
作者: lijingprince5    时间: 2013-2-4 15:22
回复 3# 赵佳乐SMILE


    哦谢谢了,我再看看~
作者: 赵佳乐SMILE    时间: 2013-2-4 15:31
回复 4# lijingprince5


   不客气
作者: 黑羽祭    时间: 2013-2-5 11:05
回复 1# lijingprince5


    http://www.51testing.com/index.php?uid-307440-action-viewspace-itemid-827863
作者: lijingprince5    时间: 2013-2-5 12:13
回复 6# 黑羽祭


    谢谢版主!!!
作者: lijingprince5    时间: 2013-2-5 14:27
回复  lijingprince5
黑羽祭 发表于 2013-2-5 11:05



    黑羽祭:如果有时间 麻烦帮我看下 下面这个操作Excel的操作.我在调用时,函数内部出现了错误:VBS错误代码为:800a03ec
函数代码
  1. Function CompareSheets(sheet1_t,sheet2_t,startColumn,numberOfColumns,startRow,numberOfRows,trimed,path)
  2.         Dim returnVal 'as boolean
  3.         'Dim workbook 'as workbook object
  4.         returnVal=true
  5.         Dim objExcelApp
  6.         Dim objExcelBook
  7.         Dim sheet1
  8.         Dim sheet2
  9.         Set objExcelApp=createobject("Excel.Application")
  10.         set objExcelBook=objExcelApp.Workbooks.Open(path)
  11.         set sheet1=objExcelBook.Worksheets.Item(sheet1_t)
  12.         set sheet2=objExcelBook.Worksheets.Item(sheet2_t)
  13.        
  14.        
  15.        
  16.        
  17.            If sheet1 is nothing or sheet2 is nothing Then
  18.         CompareSheets=false
  19.         Exit Function
  20.                
  21.        
  22.                
  23.         End If
  24.        
  25.         'start to compare
  26.         For r = startRow To (startRow + (numberOfRows -1))
  27.                 For c = startColumn To (startColumn + (numberOfColumns-1))
  28.                        
  29.                         Value1=sheet1.Cells(r,c)
  30.                         Value2=sheet2.Cells(r,c)
  31.                        
  32.                         If trimed Then
  33.                                 Value1 = trim(Value1)
  34.                                 Value2 = trim(Value2)
  35.                                
  36.                         End If
  37.                        
  38.                        
  39.                         If Value1 <> Value2 Then
  40.                                 Dim cell
  41.                                 sheet2.Cells(r,c)="Compare conflict -value was ' " & Value2 & "',Expected value is '" & Value1 &"'."
  42.                          Set cell=sheet2.Cells(r,c)
  43.                          cell.Font.Color=vbRed
  44.                          returnVal=False
  45.                         End If
  46.                 Next
  47.         Next
  48.         CompareSheets=returnVal
  49. End Function
复制代码
调用函数的代码为:
  1. CompareSheets "Sheet1","Sheet2",0,3,0,3,true,"C:\Documents and Settings\xxx.xlsx"
复制代码
谢谢您了
作者: 黑羽祭    时间: 2013-2-5 15:08
回复 8# lijingprince5


    这个函数是做Excel中,2个Sheet表的比对工作,不一样的标注出来。
但这个函数中,没有写Save 和Quit操作,也没有释放,所以在做完对比和写入操作后,进程中会有个Excel,会对下次操作造成影响。所以我改了下函数:
  1. Function CompareSheets(sheet1_t,sheet2_t,startColumn,numberOfColumns,startRow,numberOfRows,trimed,path)
  2.         Dim returnVal 'as boolean
  3.         returnVal=true
  4.         Dim objExcelApp
  5.         Dim objExcelBook
  6.         Dim sheet1
  7.         Dim sheet2
  8.         Set objExcelApp=createobject("Excel.Application")
  9.         set objExcelBook=objExcelApp.Workbooks.Open(path)
  10.         set sheet1=objExcelBook.Worksheets.Item(sheet1_t)
  11.         set sheet2=objExcelBook.Worksheets.Item(sheet2_t)

  12.         If sheet1 is nothing or sheet2 is nothing Then
  13.             CompareSheets=false
  14.             objExcelBook.Save
  15.             objExcelApp.Quit
  16.             Set sheet1 = Nothing
  17.             Set sheet2 = Nothing
  18.             Set objExcelBook = Nothing
  19.             Set objExcelApp = Nothing
  20.             Exit Function
  21.         End If
  22.         
  23.         'start to compare
  24.         Dim Value1,Value2
  25.         For r = startRow To (startRow + (numberOfRows -1))
  26.                 For c = startColumn To (startColumn + (numberOfColumns-1))
  27.                         Value1=sheet1.Cells(r,c)
  28.                         Value2=sheet2.Cells(r,c)
  29.                         If trimed Then
  30.                                 Value1 = trim(Value1)
  31.                                 Value2 = trim(Value2)
  32.                         End If
  33.                         
  34.                         If Value1 <> Value2 Then
  35.                                 Dim cell
  36.                                 sheet2.Cells(r,c)="Compare conflict -value was ' " & Value2 & "',Expected value is '" & Value1 &"'."
  37.                          Set cell=sheet2.Cells(r,c)
  38.                          cell.Font.Color=vbRed
  39.                          returnVal=False
  40.                         End If
  41.                 Next
  42.         Next
  43.         CompareSheets=returnVal
  44.         
  45.         '保存、关闭Excel并释放
  46.         objExcelBook.Save
  47.         objExcelApp.Quit
  48.         Set sheet1 = Nothing
  49.         Set sheet2 = Nothing
  50.         Set objExcelBook = Nothing
  51.         Set objExcelApp = Nothing
  52. End Function
复制代码



然后是调用:
  1. CompareSheets "Sheet1","Sheet2",1,3,1,5,true,"D:\Test.xlsx"
复制代码


这个参数好像是从1开始计数的,参数中Start位你都写的0,也会报错吧。
作者: lijingprince5    时间: 2013-2-5 15:37
回复 9# 黑羽祭


    谢谢您. 您说对了,代码有两方面的问题:
1:参数设置有问题应该从"1"开始
2:没有最后的关掉对象资源的操作,导致excel的进程一直存在


用你的 方法是OK的
作者: 黑羽祭    时间: 2013-2-5 15:48
回复 10# lijingprince5


   
作者: laoli0225    时间: 2013-2-21 23:10
回复 1# lijingprince5

Excel的操作几乎都是围绕工作簿、工作表、单元格展开的,这些就是Excel操作的核心对象,这些也是VBA的核心对象。
对于Excel来说,最外层的vba对象就是Application,代表整个Excel应用程序。每个Excel文件,都对应一个Workbook;文件中的每个Sheet工作表,都对应一个Worksheet;表单中的单元格,对应的是Range对象。从上面对于excel vba对象的介绍,可以很容易的看出每个对象的层级关系和包含关系:
  Application对象必然包含一个Workbooks集合,来表示Excel的每个文件;
  Workbook对象必然包括一个Worksheets集合,来表示它包含的所有工作表;
  Worksheet对象又必然包含Range或者Cells对象,来标识它包含的单元格
作者: lijingprince5    时间: 2013-2-22 09:52
回复 12# laoli0225


    谢谢您的分析,这样条理更清楚了。
作者: auto_tester    时间: 2014-4-21 14:33
学习了!
作者: auto_tester    时间: 2014-4-22 11:13
For i = 1 To 3 Step 1       
For j = 1 To 3 Step 1
Set excel = createobject("Excel.Application")
excel.Workbooks.Open "D:\Test.xlsx"
Set osheet = excel.Sheets.Item(1)
d =osheet.cells(i,j)
print d
next
next




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2