我正在尝试自动将excel文档上传到特定的网页。我无法链接它,因为它需要帐户。有一个带有浏览区的表单(由于是type=file的,所以我不能简单地设置值)和一个使用该输入值的upload按钮。
我可以导航到单击浏览按钮,也可以单击上载按钮,但是当我单击浏览按钮时,会弹出一个名为“选择要上载的文件”的文件资源管理器窗口,这意味着我不能与任何其他IE窗口交互,并暂停我的VBA代码,直到它关闭,这意味着我不能自动向它传递文件路径。
页面上的相关HTML是
<form method="post" name="uploadSkillForm" ENCTYPE="multipart/form-data" action='uploadSkills.do?operation=upload'>
<tr>
</tr>
<tr class="text1">
</tr>
<tr width="100%">
<td colspan="100%">
<table width="100%">
<tr>
<th align="left" colspan=3 width="60%">
<input type="file" name="uploadedFile" size="34" id="filePath" class="buttonStyle" style="height:20px"/>
<input type="button" name="upload" class="buttonStyle" value="Upload" onclick="javascript:fnUploadData()">
</th>
</tr>
</table>
</td>
</tr>
理想情况下,我只希望能够让VBA保持运行,并与对话框交互以放入文件路径,但任何设置路径值的方法都可以。
VBA目前只是打开网页并点击按钮,所以没有发布它的意义。
任何帮助都将不胜感激!
发布于 2017-03-14 00:00:38
因此,在深入研究之后,我决定只需要让VBA运行一个外部脚本来检查窗口并输入文件名,然后按enter键。目前的问题是,它专注于文件窗口,所以如果你不在正确的文件夹,它不会工作,但如果你在正确的文件夹,它将选择正确的文件,并单击打开!
vba:
Dim retval As Variant
retval = Shell("PowerShell .'" & path & "upload_tester.ps1 file_name'", 1)
其中路径是存储路径的位置,upload_tester.ps1是脚本名,而file_name将传递给脚本以输入到文件浏览器。
脚本:
param(
[Parameter(Mandatory=$true)][string]$a
)
$wshell = new-object -com wscript.shell
while(! $wshell.appactivate("Choose File to Upload")){
start-sleep -milliseconds 100
}
$wshell.appactivate("Choose File to Upload")
start-sleep -milliseconds 500;
$wshell.sendkeys($a)
$wshell.sendkeys("{ENTER}")
这将进行检查,直到文件资源管理器窗口打开,键入与其匹配的文件名,然后按enter将其选中。如果有人知道如何让它专注于文本框部分,而不是文件资源管理器部分,那就太好了,但除此之外,这对我来说是有效的!
https://stackoverflow.com/questions/42721288
复制相似问题