VBA结合Selenium实现Excel动态表粘贴到浏览器文本框相关问题
下文使用的网站仅为测试示例,不需要实际向该站点粘贴数据,仅做功能验证使用。
问题原因
你原有代码多单元格区域复制失效,是因为SetClipBoard方法仅支持传入字符串类型,单个单元格时默认读取了单元格值所以运行正常,多单元格Range对象无法直接转换为有效字符串,导致剪贴板内容为空或异常。
方案1:直接输出你需要的列表格式(推荐)
不需要转换为HTML,直接遍历可见行拼接成要求的格式即可,完整代码如下:
Sub Test() Dim obj As New WebDriver Dim Keys As New Selenium.Keys Dim lr As Long, i As Long, outputStr As String, sessionIdx As Long ' 获取K列最后有数据的行号 lr = Range("K" & Application.Rows.Count).End(xlUp).Row sessionIdx = 1 outputStr = "" ' 遍历目标区域,跳过隐藏行拼接列表内容 For i = 9 To lr If Not Rows(i).Hidden Then ' 按要求拼接每一行内容:Session X. 日期 时间. Link: 会话链接 outputStr = outputStr & "- Session " & sessionIdx & ". " & Range("L" & i).Value & " " & Range("M" & i).Value & ". Link: " & Range("N" & i).Value & vbCrLf sessionIdx = sessionIdx + 1 End If Next ' 浏览器操作逻辑 obj.Start "chrome", "" obj.Get "https://stackoverflow.com/questions/29348045/copy-from-excel-to-browser/" ' 将拼接好的列表内容写入剪贴板 obj.SetClipBoard outputStr ' 粘贴到目标文本框 obj.FindElementById("wmd-input").SendKeys Keys.Control, "v" ' 可选:操作完成后关闭浏览器 ' obj.Quit ' Set obj = Nothing End Sub
方案2:粘贴为原始表格格式
如果不需要列表,要保留原4列的表格结构,也不需要转HTML,只要把每行内容用制表符分隔,拼接成制表符分隔的文本即可,绝大多数网页输入框会自动识别这类内容为表格:
Sub 粘贴为表格格式() Dim obj As New WebDriver Dim Keys As New Selenium.Keys Dim lr As Long, i As Long, outputStr As String lr = Range("K" & Application.Rows.Count).End(xlUp).Row outputStr = "" ' 拼接表头(不需要可以删掉这行) outputStr = "会话标题" & vbTab & "日期" & vbTab & "时间" & vbTab & "会话链接" & vbCrLf ' 遍历拼接表格内容 For i = 9 To lr If Not Rows(i).Hidden Then outputStr = outputStr & Range("K" & i).Value & vbTab & Range("L" & i).Value & vbTab & Range("M" & i).Value & vbTab & Range("N" & i).Value & vbCrLf End If Next obj.Start "chrome", "" obj.Get "https://stackoverflow.com/questions/29348045/copy-from-excel-to-browser/" obj.SetClipBoard outputStr obj.FindElementById("wmd-input").SendKeys Keys.Control, "v" End Sub
补充说明
只有当你需要粘贴带格式的内容(比如可点击的超链接、带样式的表格)时,才需要将内容转换为HTML格式再写入剪贴板,普通纯文本场景用上述两种方案即可满足需求。
内容的提问来源于stack exchange,提问作者Alber
相关产品推荐
相关产品推荐

