zoukankan      html  css  js  c++  java
  • VBS操作Excel的一点问题总结

    最近在使用vbs操作excel时遇到了一些问题,目前我所能看到的书和资料上都没有介绍过相关的东西,所以做一个小小的总结。

    1.  先看看这段代码:
    For i = 1 To excel.Sheets.Count
    excel.Sheets(i).Delete
    Next
    代码似乎看起来没问题,“依次删除Excel中全部Sheet表”,但是执行结果却是错误报错:下标越界!
    现在分析原因有:
    a. EXCEL似乎不允许我们删掉一个Excel中的全部表格,因为即使我们使用CreateObject("Scripting.FileSystemObject").CreateTextFile("D:\test.xlsx"),也会默认包含一个与文件名同名的Sheet表单;
    b. EXCEL在我们删除完一个Sheet表后,会自动把后面的Sheet表向前推一个位置,这样我们执行循环删除的时候就会报错

    所以,如果我们想删除Excel表中的Sheet,可以用如下的代码来删:
    For i = 1 To excel.Sheets.Count - 1
    excel.Sheets(2).Delete
    Next
    即删除除第一个Sheet表之外的其他所有表单。

    2. excel写入和保存的的时候,网上很多人都用的是这样的代码:
    Set excel = CreateObject("Excel.Application")
    excel.Workbooks.Open "E:\a.xlsx"
    row = excel.ActiveWorkbook.Worksheets(excel.Sheets.Count).UsedRange.Rows.Count + 1
    excel.Sheets(excel.Sheets.Count).Cells(row,Chr(65)).value = "TestValue1"
    excel.ActiveWorkbook.Save
    excel.Quit
    Set excel = Nothing
    这样的代码在当前只有一个Excel文件被打开的时候确实很好用,但是如果我们需要同时执行两个脚本文件,并且每个脚本文件都有一些Excel的读写操作,那么执行之后就会发现,读写出来的数据每次都会因为执行脚本的顺序不同而变化,并且保存的时候第二个脚本的保存Excel会出错。
    现在分析原因如下:
    a. ActiveWorkbook和ActiveWorkSheet分别指的是当前处于活动状态的workbook和worksheet,所以当多个脚本同时执行这些代码时,都会把自己的数据读写到当前活动的那一个excel表单中,所以读写的数据就出错了。保存的时候也是一样,都只保存当前活动的excel,而原本应该被保存的文件却被忽略了。

    所以,我们可以采用这种方式来进行多个excel同时打开时的读写保存操作:
    Set excel = CreateObject("Excel.Application")
    excel.Workbooks.Open "E:\a.xlsx"
    bookname = left(Wscript.scriptname,len(Wscript.scriptname,instr(Wscript.scriptname,".vbs",-1,1)
    row = excel.Workbooks(bookname).Worksheets(excel.Sheets.Count).UsedRange.Rows.Count + 1
    excel.Sheets(excel.Sheets.Count).Cells(row,Chr(65)).value = "TestValue1"
    excel.excel.Workbooks(bookname).Save
    excel.Quit
    Set excel = Nothing
    这样就可以避免在多个Excel读写时相互混淆的问题了。不过qtp不支持直接使用wscript.scriptname,需要我们自己传一个文件名的参数。
     
    这个最早是在51autotest上面写的,不过前段时间51autotest出问题不能进去,所以以后的文章还是搬过来吧。原文链接http://www.51autotest.com/home.php?mod=space&uid=2535&do=blog&id=144
  • 相关阅读:
    手把手教你实现Android RecyclerView上拉加载功能
    Android基础夯实--重温动画(五)之属性动画 ObjectAnimator详解
    Android基础夯实--重温动画(四)之属性动画 ValueAnimator详解
    Android基础夯实--重温动画(三)之初识Property Animation
    Android基础夯实--重温动画(二)之Frame Animation
    Android基础夯实--重温动画(一)之Tween Animation
    css属性object-fit
    轮播图模块(vue)
    轮播图插件
    图片懒加载
  • 原文地址:https://www.cnblogs.com/SilenceCity/p/2730243.html
Copyright © 2011-2022 走看看