ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5941|回复: 32

[原创] 一键整理EH已回复历史帖,翻找借鉴自己的答案更方便!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-6-6 19:17 | 显示全部楼层 |阅读模式
本帖最后由 百度不到去谷歌 于 2014-6-8 18:03 编辑

最近回答问题发现很多都是曾经答过的类似问题 但是回去翻历史回复贴却发现EH的历史列表不好使
EH的已回复贴是按每次的回复都记录的 不是按主题排 重复的就很多了 另外分页很多 查找起来也慢
我就想直接在全部列表里一部查找到位啊
反正最近也写了好多获取网页的代码 干脆自己写一个算了
一次性获取所有历史回复 配合excle自己的筛选功能 就很容易找到想要的历史回复了
另外要做网页获取的童鞋也可以参考一下这个代码 代码写的比较随意 高手就别取笑了
希望有需要的人能用到
注意:请将代码中的网址前半部分换为你登陆以后 在个人页面中查看回复项目时的网址
主要是uid每个人不同
http://club.excelhome.net/home.php?mod=space&uid=2617308&do=thread&view=me&type=reply&orde
QQ截图20140606191555.jpg 1EH本人回复帖子.rar (79.69 KB, 下载次数: 67)

wcymiss 说到可以不登陆获取程序的启发  研究一上午 终于成功 最新成果只需输入用户名就可以获取该用户所有回复列表了
不知道是不是和wcymiss 利用的一样的原理 也许是网站bug  要是修复了 可能会失效 不过作为学习的态度 我还是发出来吧
具体细节就不多讲了 详见最新附件
附件经网友测试有问题 现已更新 经测试一般人回复列表均可以得到 个别人回复列表无法得到 目前原因不明
1EH查找某人回复帖子所有列表-无需登录.rar (51.59 KB, 下载次数: 174)

评分

5

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-6 19:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码如下
  1. Option Explicit
  2. Public oDoc As Object '用全局document对象避免每次调用都创建新的
  3. Sub 已回复帖子()
  4.     'On Error Resume Next
  5.     Dim objXml As Object, i&
  6.     Dim strText As String
  7.     Set objXml = CreateObject("MSXML2.XMLHTTP")
  8.     Set oDoc = CreateObject("htmlfile")
  9.     Application.ScreenUpdating = False
  10.     Sheet3.[A2:D65536] = ""
  11.     i = 1
  12.     Do
  13.         With objXml
  14.             .Open "GET", "http://club.excelhome.net/home.php?mod=space&uid=2617308&do=thread&view=me&type=reply&order=dateline&page=" & i & "&x=" & Rnd, False
  15.             .send
  16.             strText = .responseText
  17.         End With
  18.         GetDate strText
  19.         i = i + 1
  20.         If InStr(strText, "下一页") = 0 Or i = [H1] Then Exit Do '回复列表没有下一页时停止搜索下一页,为防过久运行无结果设置100页上限
  21.     Loop
  22.     ActiveSheet.UsedRange.RemoveDuplicates Columns:=2, Header:=xlYes '去重
  23.     [A2] = 1
  24.     i = [B65536].End(xlUp).Row
  25.     [A2].AutoFill Destination:=Range("A2:A" & i), Type:=xlFillSeries '序号
  26.     MsgBox "共为您整理回复贴" & i - 1 & "个"
  27.     Application.ScreenUpdating = True
  28.     Set objXml = Nothing
  29.     Set oDoc = Nothing
  30. End Sub
  31. Public Sub GetDate(Text$)
  32.     Dim i&, j&, txt$, k&, objTab
  33.     Dim r, arr
  34.     oDoc.body.innerHTML = Text$
  35.     Set objTab = oDoc.getElementsByTagName("table").Item(3).getElementsByTagName("th")
  36.     k = objTab.Length - 1
  37.     ReDim arr(1 To 3, 1 To k)
  38.     For i = 1 To k '遍历回复列表
  39.         With objTab
  40.         'Debug.Print i, .Cells(1).innertex
  41.             'Debug.Print i, .Item(i).innerText
  42.             arr(2, i) = .Item(i).innerText
  43.             arr(3, i) = "http://club.excelhome.net/" & HtmlFilter(.Item(i).innerHTML, "<A href=" & """" & "about:", """")
  44.             arr(3, i) = Replace(arr(3, i), "amp;", "") '去除无效字符
  45.         End With
  46.     Next
  47.     j = [B65536].End(xlUp).Offset(1).Row
  48.     Cells(j, 1).Resize(k, 2) = Application.Transpose(arr)
  49.     For i = 1 To UBound(arr, 2)
  50.         ActiveSheet.Hyperlinks.Add Cells(j + i - 1, 2), arr(3, i)
  51.     Next
  52. End Sub
  53. Public Function HtmlFilter(ByVal htmlText$, label1$, label2$) '返回html字符串lable1和最近的lable2标签中的数据
  54.     Dim pStart As Long, pStop As Long '开始位置,结束位置
  55.     pStart = InStr(htmlText, label1) + Len(label1) '找到标签信息的起始位置
  56.     If pStart <> 0 Then
  57.         pStop = InStr(pStart, htmlText, label2)
  58.         HtmlFilter = Mid(htmlText, pStart, pStop - pStart)
  59.     End If
  60. End Function
复制代码

点评

高手,有空学习下  发表于 2014-6-7 20:49

TA的精华主题

TA的得分主题

发表于 2014-6-6 19:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主是高手啊。

TA的精华主题

TA的得分主题

发表于 2014-6-6 19:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
非常感谢楼主。ActiveSheet.UsedRange.RemoveDuplicates Columns:=2, Header:=xlYes '去重,这句代码运行错误请楼主看看('On Error Resume Next取消注释可以查询,不知道结果是否是全部正确)

TA的精华主题

TA的得分主题

发表于 2014-6-6 19:56 | 显示全部楼层
有些帖子本人都么有回复过也在列表中,不知道是否可以按用户名和密码搜索自己回复过的帖子

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-6 20:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 百度不到去谷歌 于 2014-6-6 20:04 编辑
sunny_8848 发表于 2014-6-6 19:56
有些帖子本人都么有回复过也在列表中,不知道是否可以按用户名和密码搜索自己回复过的帖子


恩 我忘了一点 每个人登陆后的网址不一样 你把代码中的网址前半部分换为
你登陆后在查看本人回复的那个网址的前半部分 应该就可以了  应该只需要替换那个uid
QQ截图20140606200107.jpg


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-6-6 23:19 | 显示全部楼层
你可以写一个完整的版本,根据登录信息,下载回复的帖子

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-6 23:25 | 显示全部楼层
本帖最后由 百度不到去谷歌 于 2014-6-7 08:41 编辑
liucqa 发表于 2014-6-6 23:19
你可以写一个完整的版本,根据登录信息,下载回复的帖子


刚才倒是发现不用登陆也能得到回帖数据了 只要知道某人的uid即可 今天有点晚了
改天有空再写了
还是要登录才行了 登陆要点验证码 太难了
有这个需求的我想都是已经登陆的用户吧
只要知道uid就行了 就是自己eh空间地址的那串数字
比如http://club.excelhome.net/home.php?mod=space&uid=2617308后面就是我的uid
登陆后 想查询别人的回复贴 只需要去别人空间查看uid 修改这个uid即可
当然你也可以用一个单元格存uid传递到程序里

TA的精华主题

TA的得分主题

发表于 2014-6-7 09:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-6-7 11:09 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 00:37 , Processed in 0.051109 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表