最近在使用VRV统计WPS的安装率过程中,一直使用的是Excel VBA编程来操作的,每次操作还是麻烦,导出来以后,需要拷贝文件,然后执行宏。
这些数据如果进入数据库就好了,要这样的话一般要使用VB、C#来做,可是我的计算机上已经好长时间都没有安装这些编辑软件了,再说,现在都不兴这些编程工具了。
越简单越好,就使用VBS就可以做这些。缺点就是这个执行文件里有关键信息,不能给无关人员使用。
昨天在虚拟机上安装好服务器和MS SQL Server 2014数据库。
今天早上开始使用VBS编写代码来做同样的事情,先让Excel的记录进入MS SQL Server 2014的数据库。
中间出了一些问题,很麻烦,开始使用记事本来写,出了错误不好定位;后来使用VS CODE来编写,可是出的问题更加不可思议;再使用EditPlus来编写,问题少了一些,可是还是有;最后还是使用记事本编写才完成。
VBSCript远不如VBA和VB好用,但VBS功能很强大。
建立数据库和数据表:
完整代码:
dim currentPath
currentPath = createobject("Scripting.FileSystemObject").GetFolder(".").Path
dim T1,T2
dim excelObj
dim srcExcelBook
dim srcExcelSheet
T1 = now()
Set excelObj = CreateObject("Excel.Application")
Set srcExcelBook= excelObj.Workbooks.Open(currentPath+"\Device.xls")
set srcExcelSheet=excelObj.Worksheets("DeviceSearchLook_Export")
allEquipmentCount = srcExcelSheet.UsedRange.Rows.Count
dim conn
dim sConnStr
sConnStr="Driver={SQL server};server=IP地址;database=数据库名称;uid=用户名称;pwd=密码;"
set conn=WScript.CreateObject("ADODB.Connection")
conn.Open sConnStr
dim editRS
dim queryRS
dim sSQL
dim queryResult
set editRS =WScript.CreateObject("ADODB.Recordset")
set queryRS=WScript.CreateObject("ADODB.Recordset")
dim sMacAddr
dim sIP
dim netInfo
dim gatewayAddr
dim subnetMask
dim primaryDNS
dim secondaryDNS
dim operatingSystem
dim memorySize
dim harddiskSize
dim harddiskSerialNumber
dim cpuModel
dim userName
dim contactNumber
dim equipmentName
dim equipmentLocation
dim entryTime
dim otherSign
dim descriptiveText
dim sArr
entryTime=now()
for iFor=3 to 594
sMacAddr =srcExcelSheet.Range("I" & ifor).Value
sIP =srcExcelSheet.Range("H" & ifor).Value
netInfo =srcExcelSheet.Range("AE" & ifor).Value
operatingSystem=srcExcelSheet.Range("W" & ifor).Value
memorySize=srcExcelSheet.Range("Z" & ifor).Value
harddiskSize=srcExcelSheet.Range("AA" & ifor).Value
harddiskSerialNumber=srcExcelSheet.Range("AB" & ifor).Value
cpuModel=srcExcelSheet.Range("Y" & ifor).Value
userName=srcExcelSheet.Range("E" & ifor).Value
contactNumber=srcExcelSheet.Range("F" & ifor).Value
equipmentName=srcExcelSheet.Range("G" & ifor).Value
equipmentLocation=srcExcelSheet.Range("B" & ifor).Value
sSQL="select count(*) from VRVEquipmentRecord where c02='" & sMacAddr & "' and c01='" & sIP & "'"
queryRS.open sSQL,conn,1,1
queryResult=queryRS(0)
queryRS.close
if queryResult=0 Then
sArr=split(netInfo,",")
i=instr(sArr(2),":")
subnetMask=right(sArr(2),len(sArr(2)) - i)
i=instr(sArr(3),":")
gatewayAddr=right(sArr(3),len(sArr(3)) - i)
i=instr(sArr(4),":")
primaryDNS=right(sArr(4),len(sArr(4)) - i)
i=instr(sArr(5),":")
secondaryDNS=right(sArr(5),len(sArr(5)) - i)
editRS.open "VRVEquipmentRecord",conn, 1,3
editRS.addnew
editRS("C01").Value=sIP
editRS("C02").Value=sMacAddr
editRS("C03").Value=gatewayAddr
editRS("C04").Value=subnetMask
editRS("C05").Value=primaryDNS
editRS("C06").Value=secondaryDNS
editRS("C07").Value=operatingSystem
editRS("C08").Value=memorySize
editRS("C09").Value=harddiskSize
editRS("C10").Value=harddiskSerialNumber
editRS("C11").Value=cpuModel
editRS("C12").Value=userName
editRS("C13").Value=contactNumber
editRS("C14").Value=equipmentName
editRS("C15").Value=equipmentLocation
editRS("C16").Value=entryTime
editRS("C17").Value=""
editRS("C18").Value=""
editRS.update
editRS.close
end if
next
srcExcelBook.Close
excelObj.Quit
Set srcExcelBook = Nothing
Set destExcelBook = Nothing
Set excelObj = Nothing
set editRS=Nothing
conn.close
set conn=Nothing
T2 = now()
WScript.Echo "耗时:" & timeDiff(T2, T1) & "秒"
Function timeDiff(T2, T1)
second2 = Hour(T2) * 3600 + Minute(T2) * 60 + Second(T2)
second1 = Hour(T1) * 3600 + Minute(T1) * 60 + Second(T1)
timeDiff = Abs(second2 - second1)
End Function
显示效果图: