是否有一种快速方法可以从Windows Scripting Host 操作现有 XLS文件的内容?
我们收到了客户提供的Excel模板.我们的任务是使用从Oracle数据库中获取的数据填充这些模板.
目前的方法是使用Windows Scripting Host和VBScript:
使用ADODB从Oracle获取数据:
Set db = CreateObject("ADODB.Connection")
SQL = "SELECT ..."
Set rs=db.execute(SQL)
Run Code Online (Sandbox Code Playgroud)使用VBScript在Windows Scripting Host中创建Excel对象:
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open(xls_final)
Set objSheet = objWorkBook.Sheets(1)
Run Code Online (Sandbox Code Playgroud)然后像这样逐个单元填写模板:
If rs.EOF = False Then
rs.MoveFirst
Do Until rs.EOF
objSheet.Cells(RowNumber, 1).Value = rs("COLUMN1")
objSheet.Cells(RowNumber, 2).Value = rs("COLUMN2")
objSheet.Cells(RowNumber, 3).Value = rs("COLUMN3")
rs.MoveNext
Loop
End If
objWorkbook.Save
rs.Close
Run Code Online (Sandbox Code Playgroud)
问题是这些文件中的一些包含大量数据,并且需要花费数小时来填充它们.有更快的方法吗?
我想插入执行脚本的时间和日期.到目前为止,我只有执行脚本的人的用户名....
Set FSO = wscript.CreateObject("Scripting.FileSystemObject")
Set NewTextFile = FSO.OpenTextFile("UserInfo.flag",2,true)
Set WshNetwork = WScript.CreateObject("WScript.Network")
WScript.Echo "User Name = " & WshNetwork.UserName
NewTextFile.WriteLine("Site replication was last executed by user:")
NewTextFile.WriteLine(WshNetwork.userName)
NewTextFile.Close
Set NewTextFile = Nothing
Set FSO = Nothing
Run Code Online (Sandbox Code Playgroud) 警惕Jeff Atwood的" 浴室墙代码 "帖子,我认为为VBScript提供值得信赖的SQL清理功能会很有用,类似于PHP的mysql_real_escape_string()功能.
那么,如何使用VBScript正确清理数据输入到SQL查询?
我注意到如果从某些Windows文件中获取Scripting.File对象(例如:C:\ Windows\Media中的任何wav),Scripting.File.ShortPath属性将显示长路径.好奇我下降到命令提示符并尝试了Dir/A/X,确定该目录中的所有文件都缺少短路径.
任何人都知道:
A.)那是什么意思?
B.)如何获得一个似乎没有的文件的短路径?
有没有办法使用Windows Scripting Host在注册表中搜索特定密钥?
我正在使用JavaScript(Jscript/VBScript?)这样做,而msdn Library没有提到任何这样的方法:http://msdn.microsoft.com/en-us/library/2x3w20xf(v = VS.85 )的.aspx
谢谢,
所以这是对问题的更新:
这个问题比直接注册表搜索要复杂一些.我必须查看Windows框中已安装的产品,以查找我要删除的特定产品条目.注册表路径定义为:
HKEY_LOCAL_MACHINE\SOFTWARE \微软... \产品.
在Products键中,列出已安装的产品,但其键被定义为哈希码.产品密钥中包含具有已定义名称和定义值的其他密钥.我希望能够搜索后面的键和值.我怎么能这样做,绕过未知的哈希码?
例如,我需要找到DisplayVersion key = 1.0.0的产品.该密钥的路径是:
HKLM\SOFTWARE \微软\的Windows\CurrentVersion\Installer程序\的UserData \产品\ A949EBE4EED5FD113A0CB40EED7D0258\InstallProperties\DisplayVersion.
如何选择或避免写入产品密钥:A949EBE4EED5FD113A0CB40EED7D0258 ??
我有一个需要修复的两部分问题.我会尽力描述它然后分解我"思考"的步骤.
我想在网页上找到一个特定的表格并通过电子邮件发送给自己.
目前我正在尝试的是使用GNU\Win32 wget.exe(我宁愿本地使用PowerShell,但由于某种原因我不能,也许是因为我使用的方法无法呈现ASPX页面?)使用wget我能够制作ASPX页面的本地html版本.
现在我一直在尝试解析文件并提取特定的表.在这种特殊情况下,表以开头<table border="0" cellpadding="2" cellspacing="2" width="300px">和结尾,</table>并且没有嵌套表.
我在我的问题上抛出一些正则表达式(是的,我知道正则表达式可能不是我需要的工具),但无济于事.
---修改这里是我现在的位置......
$content = (new-object System.Net.WebClient).DownloadString($url)
$found = $content -cmatch '(?si)<table border="0" cellpadding="2" cellspacing="2" width="300px"[^>]*>(.*?)Total Queries</td>(.*?)</tr>(.*?)</table>'
$result = $matches[3]
$result
Run Code Online (Sandbox Code Playgroud) 所以我有这个函数生成一个长度为8个字符的随机字符串.它的工作原理是每页调用一次,即如果我刷新它将显示一个新的数字.
但我想在循环中生成许多这些并返回相同的数字.我怎么解决这个问题?
Function generateCode()
pChar = "0123456789"
pCount = Len(pChar)
Dim psw
psw = ""
Randomize
For i = 1 To 8 ' password length
psw = psw & Mid( pChar, 1 + Int(Rnd * pCount), 1 )
Next
generateCode= psw
End Function
Run Code Online (Sandbox Code Playgroud)
现在我认为Randomize可能基于当前时间,因此我在调用generateCode()i的循环之前取出Randomize线并调用Randomize仍然无效!
我正在寻找一个函数,该函数如何计算从数据库返回的特定字符串中有多少新行。
我见过执行此JavaScript和PHP的函数,但VBScript没有。
我想先检查字符串中是否有回车符(并对它们进行计数),然后再将它们替换为<br/>标签。
我想我可以对vbCrLf进行替换,如果找不到,则可能不会造成任何伤害。但是,出于调试目的,我现在真的很想获得计数,以便我知道它在做什么(如果它是我期望的)。
有关如何在VBScript中执行此操作的任何想法
我们有一些旧的遗留vbscript代码,需要处理某种错误.从来没有使用过vbscript,我完全失去了.这是代码:
set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
objBL.ConnectionString = "connectionstring"
objBL.KeepIdentity = false
objBL.ErrorLogFile = "E:\code\Acquity\WebOrderImport\logs\error.log"
Set fso = CreateObject("Scripting.FileSystemObject")
Set parentfolder = fso.GetFolder("E:\textdata\Acquity\AcquityWebOrders")
Set logfile = fso.OpenTextFile("E:\code\Acquity\WebOrderImport\logs\import.log",8)
count = 0
For each folder in parentfolder.subfolders
logfile.writeline count & " files"
logfile.writeline "Processing " & folder.name & " ***********************************" & now()
count = 1
For Each file in folder.files
If left(file.name,6) = "Order_" then
If left(file.name,13) = previous then
logfile.writeline "!!!!! SKIPPING file " & file.name & "!!!!! DUPED ORDER ID"
Else …Run Code Online (Sandbox Code Playgroud) 我想知道我是否可以使用下面相同的代码并进行一些小的更改来添加我需要的功能.它的写法:
::::Set WshShell = CreateObject("WScript.Shell")
::::WshShell.SendKeys "{capslock}"
Set WshShell = Nothing
findstr "^::::" "%~sf0" > temp.vbs & Cscript //nologo temp.vbs & del temp.vbs
echo Capslock is off
Run Code Online (Sandbox Code Playgroud)
结果:
我想把它改成总是OFF.如何在代码中进行这种轻微修正?
谢谢
vbscript ×10
wsh ×3
.net ×1
ado ×1
asp-classic ×1
batch-file ×1
excel ×1
filesystems ×1
jscript ×1
powershell ×1
random ×1
regex ×1
registry ×1
sanitization ×1
scripting ×1
search ×1
sql ×1
vb6 ×1
windows ×1
windows-7 ×1