作者:绿色风
分类:
时间:2022-08-17
浏览:114
楼主 kevinchengcw |
Q: 如何用vba代码向Excel中导入网页中带图片或图表的区域? A: 实现代码如下:- Option Explicit
- '声明用于操作剪贴板的API函数
- Private Declare Function OpenClipboard Lib "user32" (ByVal Hwnd _
- As Long) As Long
- Private Declare Function CloseClipboard Lib "user32" () As Long
- Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat _
- As Long, ByVal hMem As Long) As Long
- Private Declare Function EmptyClipboard Lib "user32" () As Long
- Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags _
- As Long, ByVal dwBytes As Long) As Long
- Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As _
- Long) As Long
- Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As _
- Long) As Long
- Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As _
- Long) As Long
- Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
- (Destination As Any, Source As Any, ByVal Length As Long)
- Function TextToClip(sData As String) As Boolean '自定义将文本放入剪贴板的函数
- If CBool(OpenClipboard(0)) Then
- Dim hMemHandle&, lpData&
- hMemHandle = GlobalAlloc(0, LenB(sData) + 2) '申请内存空间
- If CBool(hMemHandle) Then '如果空间申请成功
- lpData = GlobalLock(hMemHandle) '锁定内存块,返回地址
- If lpData <> 0 Then '如果返回有效地址,则
- CopyMemory ByVal lpData, ByVal sData, LenB(sData) '文本内容复制到对应内存中
- GlobalUnlock hMemHandle '解除锁定
- EmptyClipboard '清空剪贴板,以写入新文本
- SetClipboardData 1, hMemHandle '剪贴板以文本方式指向目标空间
- End If
- End If
- Call CloseClipboard '关闭剪贴板
- TextToClip = True '操作成功返回true
- Else
- TextToClip = False '操作失败时返回false
- End If
- End Function
- Sub test()
- Dim Str$
- With CreateObject("msxml2.xmlhttp") '创建xmlhttp项目,用于调取网页源码
- .Open "get", "http://cj.gw.com.cn/news/stock/sh601318/baidu_frame_v1.shtml?qk=601318&srcid=14442", False '读取指定页内容
- .send '发送请求
- Str = .responsetext '提取返回内容文本
- End With
- If TextToClip(Str) Then ActiveSheet.Paste [a1] '如果成功将文本内容放入剪贴板,则在活动工作A1单元格进行粘贴操作
- End Sub
数据导入功能即使用完全Html格式也无法导入图表是个遗憾,本例意在尽力弥补这一缺憾 实现原理: 将数据通过剪贴板粘贴进工作表中,Excel会自动读取网页代码中指定的各项内容(含图片图表等页面附件),从而实现完全导入
以上结合正则等文本处理,可以实现对具体区域表格的定向导入,从而更加灵活
不足: 利用剪贴板操作容易影响用户正常操作
替代构想: 可以尝试用word读取全部网页后转回excel中
详见附件及素材源帖.
VBA导入带图表网页.rar |
2楼 xyf2210 |
谢谢分享学习 |
3楼 老糊涂 |
谢谢分享学习 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一