我尝试自动将Excel文档上传到特定网页。我无法将其链接,因为它需要一个帐户。有一个带有浏览部分的表单(类型=文件,因此我只能设置值)和一个使用该输入值的上传按钮。
我可以导航到单击浏览按钮,然后我可以单击上传按钮,但是当我单击浏览按钮时,文件浏览器窗口名为"选择要上载的文件"弹出并意味着我无法与任何其他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目前只是打开网页并点击按钮,所以没有点发布它。
任何帮助都会非常感激!
答案 0 :(得分:0)
因此经过多次挖掘后我决定让VBA运行一个外部脚本来检查窗口并输入文件名然后按回车键。目前的问题是它专注于文件窗口,所以如果你不在正确的文件夹中它不起作用,但如果你是,它将选择正确的文件并点击打开!
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键将其选中。如果有人知道如何让它专注于文本框部分而不是文件浏览器部分,那将是伟大的,但否则这适用于我的目的!