VBScript开发Excel常见问题
VBS基础
基本概念:VB & VBS & VBA
- VB是一种编译型的语言,主要用于开发Windows应用程序,代码编译后生成二进制的可执行程序。
- VBScript是一种脚本型的语言,这种脚本语言的宿主程序是WSH(Windows Scripting Host),脚本程序运行时,加载的是Windows上下文环境。VBS强大的一点在于可以调用系统的COM对象,比如我可以创建Excel.Application对象,而且系统注册的Excel.Application对象可自动识别系统的Excel运行版本,创建对应的对象。
- VBA也是一种脚本语言,但是这种脚本语言的宿主是应用程序,如Excel,AutoCAD,CATIA。加载的上下文环境也是应用程序的上下文环境。其中使用最普遍的就是Excel VBA程序了。
帮助文档
脚本格式
- cscript:命令行模式运行VBScript脚本。
- wscrip:交互模式运行VBScript脚本,可弹出GUI窗体与用户交互,这种脚本执行模式是Windows默认的脚本执行程序。
内建函数
VBScript中有一些内建函数,可以直接使用。
类对象
这点是我没想到的,我以为vbs语法比较简单。实际VBS还是支持类声明的,用来构造业务对象的数据结构挺方便。
Dim cfg
Set cfg = new SheetConfigType
Set cfg = nothing Class SheetConfigType public Index
public CustomRowHeight private Sub Class_Initialize()
'do nothing
End Sub private sub Class_Terminate()
'do nothing
End Sub End Class
对象赋值
运行环境
VBS和VBA的运行环境还是有区别的,VBS默认只加载了Windows运行环境。在Excel里面录制的宏,是不能直接拿来用的。像Selection、Range这种对象在Excel VBA中可以直接使用,在VBS中是需要先创建再使用的。
<job id="ExcelReport">
<reference guid="{00020813-0000-0000-C000-000000000046}"
comment="MSExcel 2002 tag library, under HKEY_CLASSES_ROOT\TypeLib\"/>
<script language="VBScript">
Option Explicit
On Error Resume Next
Dim xlsPath, excelApp, workbook, sheet
xlsPath = WScript.Arguments()
Set excelApp = CreateObject("Excel.Application")
excelApp.DisplayAlerts = False
Set workbook = excelApp.Workbooks.Open(xlsPath)
For Each sheet In workbook.Worksheets
'do something
Next
workbook.Close
excelApp.Quit
</script>
</job>
异常处理
在VBS中如果脚本运行出现异常,异常直接就被抛出了,后面的脚本是不会被执行的。这就会造成一个问题,比如创建了一个Excel对象,执行到一半,脚本崩溃,但这个Excel对象还在进程中,并没有被回收销毁。解决方案也很简单,在脚本前面加一行代码: On Error Resume Next 。如果脚本异常,继续执行下一行,这样脚本肯定能跑到进程关闭那行的。但是调试的时候,不要写这行,不然很难定位到底是哪出BUG了,发布的时候再加上。
VBScript开发Excel常见问题的更多相关文章
- C# 操作 Excel 常见问题收集和整理
C# 操作 Excel 常见问题收集和整理(定期更新,欢迎交流) 经常会有项目需要把表格导出为 Excel 文件,或者是导入一份 Excel 来操作,那么如何在 C# 中操作 Excel 文件成了一个 ...
- VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式
原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)
本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中 ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)
本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二) 前几天有点事情所以没有继续更新,今天我们接着说.上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其 ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (四)2018.4.3更新
本帖是延续的:C# Unity游戏开发--Excel中的数据是如何到游戏中的 (三) 最近项目不算太忙,终于有时间更新博客了.关于数据处理这个主题前面的(一)(二)(三)基本上算是一个完整的静态数据处 ...
- 2019最新最全Java开发面试常见问题答案总结
2019最新最全Java开发面试常见问题答案总结 马上准备9月份出去面试Java开发,自己学习丢西瓜捡芝麻,学了的都忘了,所以有机会自己做个学习笔记,摘录自各个博文以及总结. 1.JAVA面向对象的特 ...
- iOS开发中常见问题集锦
在iOS开发中,会出现各种各样的问题.今天,就把这些常见的问题以及各位大牛的解决方案汇总下,方便以后查阅: 常见错误: 1. linker command failed with exit code ...
- C# 操作 Excel 常见问题收集和整理(定期更新,欢迎交流)
经常会有项目需要把表格导出为 Excel 文件,或者是导入一份 Excel 来操作,那么如何在 C# 中操作 Excel 文件成了一个最基本的问题. 做开发这几年来,陆陆续续也接触过这样的需求,但因为 ...
- 转-C# 操作 Excel 常见问题收集和整理
经常会有项目需要把表格导出为 Excel 文件,或者是导入一份 Excel 来操作,那么如何在 C# 中操作 Excel 文件成了一个最基本的问题. 做开发这几年来,陆陆续续也接触过这样的需求,但因为 ...
随机推荐
- centos6.5安装docker(亲测)
centos6.5下安装docker的过程办法 在看了网上N多复制粘贴的文章,又尝试无效后,我把我最终成功的办法发出来,希望能帮到拼命干环境的你. 操作环境: centos6.5(Final) 内核: ...
- IPC之binder机制
我们知道,在Android系统中,每一个应用程序都运行在独立的进程中,这也保证了当其中一个程序出现异常而不会影响另一个应用程序的正常运转.在许多情况下,我们activity都会与各种系统的servic ...
- Microsoft Power BI Desktop概念学习系列之Microsoft Power BI Desktop是什么?
不多说,直接上干货! 官网 https://powerbi.microsoft.com/zh-cn/desktop/ Microsoft Power BI Desktop是什么? https://p ...
- Cygwin、Msys、MinGW、Msys2的区别与联系(转)
网上有很多文章讲它们之间的区别与联系,初学者看的一头雾水,在知乎上看到这篇文章讲的很清楚,容易理解. 在讲区别联系之前,我们先看一下这几个东东的前世今生. Cygwin,原 Cygnus 出品(已 ...
- TreeMap红黑树
Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构 ...
- Angular2 不明真相第一个Demo例子
如果不是去年换工作接触到AngularJS,估计是不会花时间去学习这个框架的,毕竟是前端的框架,不是自己熟悉的领域.但是为了混得下去,去年就学习了AngularJS的一些用法,当时还整理了一些积累 & ...
- oracle 数据库添加Java方法
create or replace and compile java source named "Bitconverter" aspublic class Bitconverter ...
- 设置主外键时 ORA-02298: 无法验证 - 未找到父项关键字 --NOVALIDATE;
主要原因是: 在添加CONSTRAINT的时候,默认是需要VALIDATE表中的已有数据的. 你要插入的表A里,有外键连接到另一个表B的主键,你在表A的外键列插入的值,在表B的主键列找不到就不能插入. ...
- JavaScript ES6 promiss的理解。
本着互联网的分享精神,我将我对promise的理解分享给大家. JavaScript ES6的promise方法主要应用在处理异步函数返回的结果,注意他不是将异步函数转换为同步函数,而是等异步函数有结 ...
- scala笔记,主要摘自网络教程
1.scala是一种纯面向对象的语言,每个值都是对象.对象的数据类型以及行为由类和特质描述 2.类的扩展有2种机制:继承和混入机制 3.scala是一种函数式语言,其函数也能当成值来使用 ==4.sc ...