用webbrowser控件如何读取代码中表格里的数据并显示

my202com4 2011-06-05 04:07:24
请根据下面的HTML代码帮我分析一下,如果我想用webbrowser控件读取其中的
欠费金额,应该如何查找呢?
最好有具体的完成语句,
要求读出的格式为:(举例如下,不一定代表就是下面代码的数据)
===========================
序号 年度 欠费金额 滞纳金
1 2011 1200.00 23.14
2 2010 800.00 145.70
3 2007 360.00 3689.70
===========================
要完成上述“=”内部的内容的显示,
在vb中如何写代码呢?
主要是要读取部分的代码,其余部分已经完成。
最好是不用循环,直接取出数据,
但数据可能每次取出的HTML代码是不一样的,
如果必须用循环,请给个代码看看,
采纳后,百分相送。

下面的代码是用webbrowser读取出来的。
----------------------------------------------------------

HTML code
<TABLE class=printtab width=600>
<TBODY>
<TR class=tablabel>
<TD class=printtd>单位公章</TD>
<TD class=printtd>打印时间:</TD>
<TD class=printtd>打印地点:</TD>
<TD class=printtd>打印人:</TD></TR></TBODY></TABLE>
<TABLE class=printtab width=600>
<TBODY>
<TR>
<TD>
<TABLE style="cellspacing: 0; cellpadding: 0" width="100%">
<TBODY>
<TR class=tablabel>
<TD class=printtd width=60>用户编号:</TD>
<TD class=printtd width=140>12345678</TD>
<TD class=printtd width=60>用户名称:</TD>
<TD class=printtd width=140>李强</TD>
<TD class=printtd width=60>房屋性质:</TD>
<TD class=printtd width=140>居民</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE style="cellspacing: 0; cellpadding: 0" width="100%">
<TBODY>
<TR class=tablabel>
<TD class=printtd width=60>住址:</TD>
<TD class=printtd width=450>住址省略</TD>
<TD class=printtd width=60>进户时间:</TD>
<TD class=printtd width=60>199901</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE style="cellspacing: 0; cellpadding: 0" width="100%">
<TBODY>
<TR class=tablabel>
<TD class=printtd width=60>公司:</TD>
<TD class=printtd width=140>第一分公司</TD>
<TD class=printtd width=60>收费员:</TD>
<TD class=printtd width=140>张三</TD>
<TD class=printtd width=60>面积:</TD>
<TD class=printtd width=140>75.58</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE style="cellspacing: 0; cellpadding: 0" width="100%">
<TBODY>
<TR class=tablabel>
<TD class=printtd width=60>备注:</TD>
<TD class=printtd width=600>地址详情;</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE style="cellspacing: 0; cellpadding: 0" width="100%">
<TBODY>
<TR class=tablabel>
<TD class=printtd>年度</TD>
<TD class=printtd>应收</TD>
<TD class=printtd>实收</TD>
<TD class=printtd>欠费</TD>
<TD class=printtd>滞纳金</TD>
<TD class=printtd>欠费合计</TD></TR>
<TR class=tablabel>
<TD class=printtd>2011</TD>
<TD class=printtd>3049.65</TD>
<TD class=printtd>0.0</TD>
<TD class=printtd>3049.65</TD>
<TD class=printtd>0.0</TD>
<TD class=printtd>3049.65</TD></TR>
<TR class=tablabel>
<TD class=Noprint>2010</TD>
<TD class=Noprint>3049.65</TD>
<TD class=Noprint>3049.65</TD>
<TD class=Noprint>0.0</TD>
<TD class=Noprint>0.0</TD>
<TD class=Noprint>0.0</TD></TR>
<TR class=tablabel>
<TD class=Noprint>2009</TD>
<TD class=Noprint>3049.65</TD>
<TD class=Noprint>609.93</TD>
<TD class=Noprint>0.0</TD>
<TD class=Noprint>0.0</TD>
<TD class=Noprint>0.0</TD></TR>
<TR class=tablabel>
<TD class=Noprint>2008</TD>
<TD class=Noprint>3049.65</TD>
<TD class=Noprint>609.93</TD>
<TD class=Noprint>0.0</TD>
<TD class=Noprint>0.0</TD>
<TD class=Noprint>0.0</TD></TR>
<TR class=tablabel>
<TD class=Noprint>2007</TD>
<TD class=Noprint>2611.29</TD>
<TD class=Noprint>2611.3</TD>
<TD class=Noprint>-0.01</TD>
<TD class=Noprint>0.0</TD>
<TD class=Noprint>-0.01</TD></TR>
<TR class=tablabel>
<TD class=Noprint>2006</TD>
<TD class=Noprint>2611.29</TD>
<TD class=Noprint>2611.3</TD>
<TD class=Noprint>-0.01</TD>
<TD class=Noprint>0.0</TD>
<TD class=Noprint>-0.01</TD></TR>
<TR class=tablabel>
<TD class=printtd>合计</TD>
<TD class=printtd> </TD>
<TD class=printtd>0.0</TD>
<TD class=printtd>3049.65</TD>
<TD class=printtd>0.0</TD>
<TD class=printtd>3049.65</TD></TR>
<TR class=tablabel>
<TD class=Noprint>合计[不打印]</TD>
<TD class=Noprint> </TD>
<TD class=Noprint>9492.11</TD>
<TD class=Noprint>3049.63</TD>
<TD class=Noprint>0.0</TD>
<TD class=Noprint>3049.63</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>


--------------------------------------------
请高人帮忙,,有百分相送啊。
...全文
328 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
my202com4 2011-06-07
  • 打赏
  • 举报
回复
问题解决了,
我用数组的方法存储了每一个值,
这样很方便了。
谢谢大家的建议。
z_wenqian 2011-06-07
  • 打赏
  • 举报
回复

s = 'HTML代码
s = Mid(s, InStr(1, s, "<TD class=printtd>年度</TD>"))
s = Left(s, InStr(1, s, "<TD class=printtd>合计</TD>") - 1)
s = Replace(s, "<TD class=printtd>", "")
s = Replace(s, "<TD class=Noprint>", "")
s = Replace(s, "</TR>", "")
s = Replace(s, vbCrLf, "")

'输出结果
s1 = Split(s, "<TR class=tablabel>") '每一行
For i = 0 To UBound(s1) - 1
s2 = Split(s1(i), "</TD>") '每一列
If i = 0 Then
Debug.Print "序号", s2(0), s2(3), s2(4)
ElseIf Val(s2(3)) > 0 Then
Debug.Print i, s2(0), s2(3), s2(4)
End If
Next i

序号 年度 欠费 滞纳金
1 2011 3049.65 0.0

hrbzhj 2011-06-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 z_wenqian 的回复:]
"代码是用webbrowser读取出来的",你的原话。
[/Quote]
s是定义成string类型就可以 么?
z_wenqian 2011-06-06
  • 打赏
  • 举报
回复
"代码是用webbrowser读取出来的",你的原话。
hrbzhj 2011-06-06
  • 打赏
  • 举报
回复
s = 'HTML代码
这句是怎么实现的呢?
无·法 2011-06-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hrbzhj 的回复:]

引用 14 楼 sysdzw 的回复:
引用 12 楼 hrbzhj 的回复:

引用 11 楼 sysdzw 的回复:
方法一:取出html内容,当做一个字符串处理,处理方法可以用vb的基本字符串函数或者正则,推荐使用后者
方法二:当做dom对象处理,直接读取表格对象。xx.cells(i,j)

自己实现吧,不信你一个方法都不会。

能写一下具体的实现方法么?
代码不一定……
[/Quote]
不好意思是我看错了,可是这么简单的问题你不会转换下么?
Debug.Print IIf(i = 0, "序号", i), s2(0), IIf(Cint(s2(3))<=0,"",s2(3)), s2(4)
==========>
if Cint(s2(3))>0 then
Debug.Print IIf(i = 0, "序号", i), s2(0), s2(3), s2(4)
end if
hrbzhj 2011-06-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sysdzw 的回复:]
引用 12 楼 hrbzhj 的回复:

引用 11 楼 sysdzw 的回复:
方法一:取出html内容,当做一个字符串处理,处理方法可以用vb的基本字符串函数或者正则,推荐使用后者
方法二:当做dom对象处理,直接读取表格对象。xx.cells(i,j)

自己实现吧,不信你一个方法都不会。

能写一下具体的实现方法么?
代码不一定要写全,让我能看明白怎么个过程就可以了。
……
[/Quote]
这个代码只是让小于零的显示为“”,但我是想让欠费和滞都为零或是有一个小于零的就不显示那行,
麻烦你也看明白点啊。
无·法 2011-06-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hrbzhj 的回复:]

引用 11 楼 sysdzw 的回复:
方法一:取出html内容,当做一个字符串处理,处理方法可以用vb的基本字符串函数或者正则,推荐使用后者
方法二:当做dom对象处理,直接读取表格对象。xx.cells(i,j)

自己实现吧,不信你一个方法都不会。

能写一下具体的实现方法么?
代码不一定要写全,让我能看明白怎么个过程就可以了。
[/Quote]你连声明一个字符串变量都有疑问,怎么能指望你看明白呢。


[Quote=引用 5 楼 my202com4 的回复:]

引用 4 楼 z_wenqian 的回复:
VB code

s = 'HTML代码
s = Mid(s, InStr(1, s, "<TD class=printtd>年度</TD>"))
s = Left(s, InStr(1, s, "<TD class=printtd>合计</TD>") - 1)
s = Replace(s, "<TD class=printtd>", ""……

那如何判断一下欠费的金额小于零的呢?
让小于零的不显示出来。
[/Quote]
人家给出的方法是:
Debug.Print IIf(i = 0, "序号", i), s2(0), IIf(Cint(s2(3))<0,"",s2(3)), s2(4)


你在上楼有说大于0,你让大家情何以堪啊?

2008.2009.2010三行欠费和滞纳金都为零了
就不应该显示这三行了,

Debug.Print IIf(i = 0, "序号", i), s2(0), IIf(Cint(s2(3))<=0,"",s2(3)), s2(4)
麻烦动点脑筋
z_wenqian 2011-06-06
  • 打赏
  • 举报
回复
Debug.Print IIf(i = 0, "序号", i), s2(0), IIf(Cint(s2(3))<0,"",s2(3)), s2(4)
hrbzhj 2011-06-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 z_wenqian 的回复:]
Debug.Print IIf(i = 0, "序号", i), s2(0), IIf(Cint(s2(3))<0,"",s2(3)), s2(4)
[/Quote]
你看你写的代码里,
2008.2009.2010三行欠费和滞纳金都为零了
就不应该显示这三行了,
这个应该怎么解决呢?
my202com4 2011-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 z_wenqian 的回复:]
VB code

s = 'HTML代码
s = Mid(s, InStr(1, s, "<TD class=printtd>年度</TD>"))
s = Left(s, InStr(1, s, "<TD class=printtd>合计</TD>") - 1)
s = Replace(s, "<TD class=printtd>", "")
s……
[/Quote]
那如何判断一下欠费的金额小于零的呢?
让小于零的不显示出来。
z_wenqian 2011-06-06
  • 打赏
  • 举报
回复

s = 'HTML代码
s = Mid(s, InStr(1, s, "<TD class=printtd>年度</TD>"))
s = Left(s, InStr(1, s, "<TD class=printtd>合计</TD>") - 1)
s = Replace(s, "<TD class=printtd>", "")
s = Replace(s, "<TD class=Noprint>", "")
s = Replace(s, "</TR>", "")
s = Replace(s, vbCrLf, "")

'输出结果
s1 = Split(s, "<TR class=tablabel>") '每一行
For i = 0 To UBound(s1) - 1
s2 = Split(s1(i), "</TD>") '每一列
Debug.Print IIf(i = 0, "序号", i), s2(0), s2(3), s2(4)
Next i

结果:
序号 年度 欠费 滞纳金
1 2011 3049.65 0.0
2 2010 0.0 0.0
3 2009 0.0 0.0
4 2008 0.0 0.0
5 2007 -0.01 0.0
6 2006 -0.01 0.0
hrbzhj 2011-06-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sysdzw 的回复:]
方法一:取出html内容,当做一个字符串处理,处理方法可以用vb的基本字符串函数或者正则,推荐使用后者
方法二:当做dom对象处理,直接读取表格对象。xx.cells(i,j)

自己实现吧,不信你一个方法都不会。
[/Quote]
能写一下具体的实现方法么?
代码不一定要写全,让我能看明白怎么个过程就可以了。
无·法 2011-06-06
  • 打赏
  • 举报
回复
方法一:取出html内容,当做一个字符串处理,处理方法可以用vb的基本字符串函数或者正则,推荐使用后者
方法二:当做dom对象处理,直接读取表格对象。xx.cells(i,j)

自己实现吧,不信你一个方法都不会。
z_wenqian 2011-06-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hrbzhj 的回复:]
引用 8 楼 z_wenqian 的回复:
"代码是用webbrowser读取出来的",你的原话。

s是定义成string类型就可以 么?
[/Quote]

对: Dim s As String
三断笛 2011-06-05
  • 打赏
  • 举报
回复
HTML DOM分析一下
my202com4 2011-06-05
  • 打赏
  • 举报
回复
不是的,应该可以取出元素,进行判断的
  • 打赏
  • 举报
回复
归根结底,就一个文本串处理问题。正则吧

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧