1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > VBS判断excel版本

VBS判断excel版本

时间:2018-08-06 18:08:30

相关推荐

VBS判断excel版本

想要实现如下的两个目标:

1.通过vbs判断某路径下的数个excel文件是03版本还是07版本,如果有文件是03的,跳出,如果都是07的则调用某批处理文件.

2.同上类似,不过是单个判断,指定文件名的excel文件,判断其版本,是03跳出,07的则调用批处理.

EXCEL的文件扩展名和不同。是XLS,是XLSX。即使是在EXCEL里存为XLS,那它也是的格式。所以这个不会有错。所以先DIR”路径\*.exl*”,然后循环dir,把所有EXCEL文件的名称得到,在循环中赋给临时变量,比如theforeverOncsdn。这个具体方法网上有很多现成的遍历文件夹内文件的例程,很多是使用FSO的方法,大体也差不多,只要能实现都可以。

在得到每个文件名的时候,就可以截取扩展名判断是XLS还是XLSX。前者则为,后者则为.

这个最通用的应该是自己解析PE文件格式,从中读取到excel.exe的版本信息,当然也可以用一些取巧的方法来实现,例如:

VBScript code:

Set oVer = WScript.GetObject(“res://C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE/16/1″)

WScript.Sleep 500

‘oInfo = Split(oVer.body.innerHTML,Chr(01))

‘For i = 1 To UBound(oInfo)

‘WScript.Echo oInfo(i)

‘Next

WScript.Echo oVer.body.innerhtml

其中就包含了excel的版本。

另外一个方法则是判断excel.exe的创建时间来判断版本,只需要用到fso对象即可。

但是上面的方法好像是不那么对的,因为“Set oVer = WScript.GetObject(“res://C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE/16/1″) ”这个方法只是能取到本机安装的EXCEL的版本,但不是具体每个EXCEL的版本,意义完全是两码事,如果安的是,不代表没有的EXCEL文档。

“另外一个方法则是判断excel.exe的创建时间来判断版本,只需要用到fso对象即可.”

这个根本是不行的。EXCEL.EXE的创建时间?这个根本说明不了什么,文件每当被复制时都可能重新设置时间,这个取决于系统的设置,有的设置是保留原始创建时间的,但有的设置就不会保留而使用复制时的时间。

“最通用的应该是自己解析PE文件格式”。PE文件是指可执行文件,EXE和DLL这样的。如果用HEX编辑器看XLS,会发觉有点像,但根本不是。不过排除这个认定错误,就说是用文件的文件头信息的话,的确是最准确的,因为扩展名也可以改(不过改了肯定会影响使用,所以正常来说不会故意改成不好使,只不过说有这种极端的可能性存在),而文件数据,其实也是可以改的,但改了就可能完全不能用了。

而且“Set oVer = WScript.GetObject(“res://C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE/16/1″) ”

而且这个方法如果只这样写,也可能完全失效。因为安装路径不可能固定就是这样,用户会自己选择驱动器和安装目录名称。如果是取本机的EXCEL版本,取注册表里EXCEL注册键的版本信息就可以。

另外,关于EXCEL文件格式,上面说了肯定不是PE,而且,当初对XLSX也稍微研究了一下,发现这个文件,可以改成ZIP扩展名使用,没错,它就是一个压缩包(所以同样内容,用EXCEL格式保存反而比EXCEL格式更小,这正是导致我这个发现的判断线索)。里面按组织存了若干文件,十分有趣,意义很明显,而且都可以编辑,基本都是XML格式,只不过不是很直观,如下的代码就能完全实现这个目标,如下:

VBScript code:

Function getStdOut(exeCstr)

on error resume next

Set ws = CreateObject("WScript.Shell")

Set oStdOut = ws.Exec(exeCstr).StdOut

Do until oStdOut.AtEndOfStream

' getStdOut = getStdOut & oStdOut.Read(1)

' getStdOut = getStdOut & oStdOut.ReadLine()

getStdOut = oStdOut.ReadAll()

Loop

End Function

Function get7zType(ExePath7z, FileName)

if ExePath7z="" then : ExePath7z="D:\7z-920\7z.exe" : end if ' Note: "ExePath7z" must be a short path name

oType = getStdOut("cmd.exe /k " & ExePath7z & " l -slt """& FileName &""" | findstr /I ""^Type.=."" && exit")

get7zType =Right(oType, Len(oType)-6)

End Function

msgbox get7zType("" , wscript.arguments(0))

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。