VBS判断excel版本

这篇博客探讨了如何使用VBS判断Excel文件是2003还是2007版本。通过检查文件扩展名、解析PE文件格式、尝试获取Excel.exe版本信息以及利用7-Zip识别文件类型等方法,作者讨论了各种方法的可行性及其局限性。重点指出,最可靠的方法是检查文件头信息,因为扩展名可能被修改,而文件头信息不易篡改。
想要实现如下的两个目标:

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

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

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

这个最通用的应该是自己解析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的版本,意义完全是两码事,如果安的是2007,不代表没有2003的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扩展名使用,没错,它就是一个压缩包(所以同样内容,用EXCEL2007格式保存反而比EXCEL2003格式更小,这正是导致我这个发现的判断线索)。里面按组织存了若干文件,十分有趣,意义很明显,而且都可以编辑,基本都是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))
YOLOv11人物目标检测数据集 目标类别:['Persona'] 中文类别:['人物'] 训练集:1683 张 验证集:182 张 测试集:0 张 总计:1865 张 该数据集提供了data.yaml文件,内容如下: train: ../train/images val: ../valid/images test: ../test/images nc: 1 names: ['Persona'] YOLOv11城市街头与室内场景人物目标检测数据集 该数据集涵盖了城市街头、商业街区、办公场所及室内生活等多种场景中的人物目标检测,具有广泛的应用价值。通过多样的场景设置和丰富的拍摄角度,能够有效提升模型在复杂环境下的目标识别能力,为智慧城市、安防监控及人机交互等领域提供高质量的训练数据支持。 从数据分布来看,该数据集包含1683张训练集图像、182张验证集图像以及0张测试集图像,整体比例分配合理。训练集与验证集的比例约为9.25:1,能够充分满足模型训练与性能评估的需求,确保模型在不同场景下的泛化能力得到充分验证。 该数据集的标注工作严谨规范,所有图像均经过人工精确标注,每个目标都配有清晰的边界框和统一的标签“Persona”。标注过程遵循严格的标准,确保了数据的高质量和一致性,为后续的模型训练和性能优化提供了可靠的基础。 基于其多样化的场景覆盖和高质量的标注数据,该数据集可广泛应用于智慧城市管理、公共场所安防监控、智能零售分析以及家庭安防等多个领域。特别是在需要精准识别复杂环境中人物的目标检测任务中,该数据集能够显著提升模型的准确性和鲁棒性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值