Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: obethermy en Octubre 27, 2016, 03:55:57 pm
-
tengo esta tabla de referencia como ejemplo en html
Fecha: 19/10/2016
Cod. Almacen Día
1 Almacen Bolt Miercoles
Item Productos Kgs.
2 Pollo 90
3 Carne 150
4 Conejo 92
5 Lagarto 72
6 Gallina 26
7 Cochino 219
8 Pavo 512
Este es el codigo del archivo hrml llamemole Almacen.html
<html>
<BODY>
<h2>Fecha: 19/10/2016</h2><table class="TablaVerde"><tr><td>Cod.</td><td>Almacen</td><td>Día</td></tr><tr><td><h2>1<h2></td>
<td><h2>Almacen Bolt</h2></td>
<td><h2>Miercoles</h2></td></tr><tr><td colspan="3"><table class="TablaVerde"><tr><td>Item</td><td>Productos</td><td>Kgs.</td></tr><tr><td>2</td><td>Pollo</td><td>90</td></tr><tr><td>3</td><td>Carne</td><td>150</td></tr><tr><td>4</td><td>Conejo</td><td>92</td></tr><tr><td>5</td><td>Lagarto</td><td>72</td></tr><tr><td>6</td><td>Gallina</td><td>26</td></tr><tr><td>7</td><td>Cochino</td><td>219</td></tr><tr><td>8</td><td>Pavo</td><td>512</td></tr></table></td></tr></table></BODY></html>
La tabla repite el Almacen Bolt Codigo=2,3,4,5,6,7,8,9 depende de los dias puede tener menos codigos. Cloaro hay otros almacenes que hacen lo mismo.
Lo que trato de hacer es sacar solo los Almacen Bolt de ese dia y pasarlo a un archivo .html para despues convertirlo a un .cvs que ira a una base de datos mysql.
Lo he hecho pero a base de calculos contando cuantos Almacenes Bolt hay ese dia para luego pasarlo.
La pregunta es si alguien sabe una manera mas sencilla claro en visual basic 6.
-
hola obethermy, no entendi muy bien la pregunta, vos queres sacar algún dato especifico de esa tabla?, la tabla mantiene siempre la misma estructura?, pon otro ejemplo y que datos quieres sacar precisamente.
Saludos
-
La tabla mantiene la misma estructura de la pagina web la cual no es de mi propiedad.
La tabla es una tabla de ejemplo.
Se repite la misma tabla con diferente contenido para el codigo 2 de almacen bolt del dia miercoles
por ejemplo
esta es la tabla 2 la cual se identificaria con el codigo 2
Cod. Almacen Día
2 Almacen Bolt Miercoles
Item Productos Kgs.
1 Arrroz 900
2 Azucar 500
Es como si el almacen estuviera dividido en secciones puede ser 8,9,10
Lo que quiero es sacar los productos y los kgs del almacen bolt de ese dia ya que en ese dia hay otros almacene con sus productos.
Llevarlos a listbox, textbox,ritchtexbox le hago un cambio para llevarlo a un archivo .csv y posteriormente pasallo a una base de datos mysql( este paso ya esta hecho)
Yo ya lo he hecho pero quisiera saber si hay una manera mas simple de hacerlo.
-
Creo que si quieres obtener informacion de una pagina web si recuerdo bien era utilizando la propiedad getelementbyid del control webbrowser
-
si te fijas bien en el codigo fuente que puse el que tiene la pagina en cuestion no tiene id solo <table class="TablaVerde"> , los <td> y <tr> . Y esto se repite en todas las tablas. No hay nada con que identificar a menos que se navega por cada campo y ir comparando. por eso pregun para ver si hay un forma mas facil.
-
hola yo lo haria asi, utilizando el objeto htmlfile_FullWindowEmbed que es muy útil para parsear html
Option Explicit
Private Sub Form_Load()
Dim sHtml As String
Dim HtmlDOC As Object
Dim i As Long
Dim oTable As Object, oTD As Object
'aca depende cual sea tu metodo con el html.
sHtml = ReadFile("C:/Users/leandro/Desktop/Almacen.html")
Set HtmlDOC = CreateObject("htmlfile_FullWindowEmbed")
HtmlDOC.body.innerHTML = sHtml
Set oTable = HtmlDOC.body.getElementsByTagName("table")(1) 'Segunda Tabla
'de 0 a 2 son las cabeceras (Item Productos Kgs.)
For i = 3 To oTable.getElementsByTagName("td").length - 1 Step 3
Set oTD = oTable.getElementsByTagName("td")
Debug.Print oTD(i).innertext, oTD(i + 1).innertext, oTD(i + 2).innertext
Next
End Sub
Private Function ReadFile(ByVal sFile As String) As String
Dim FF As Integer
FF = FreeFile
Open sFile For Input As FF
ReadFile = Input$(LOF(FF), #FF)
Close FF
End Function
-
Efectivamente esa esta bien .Lo habia hecho mas largo utilizando referencia a microsoft html librery comparando y totalizando para luego sacar los datos. Pero el tuyo es mas corto. Gracias por eso ya habia oido del parser.
sHtml = ReadFile(App.Path + "\PRUEBA.HTML")
Para trabajar dentro de la carpeta del programa.
Pero faltaria como determino cuantos almacenes bolt hay yo uso comparando cuantos almacenes bolt hay y totalizando. Para luego agruparlo en almacenes bolt (ya que pueden haber varios tipos de almacenes) para ese dia.
Pero quisiera saber si se puede tratar como un diagrama uno va al dia miercoles luego a los almacenes bolt detecta que hay para ese dia los codigo=1,2,3,4,5,67,8 de almacenes bolt y saco los datos mencionados.
-
Lo que estoy haciendo ahorita es comparar la tabla de datos es ALMACENES BOLT y ponerle un contador para saber cuantos codigos hay ese dia para luego capturar todos los almacenes bolt de ese dia y sacar sus datos
-
no se bien a que es Almacén Bolt pero suponiendo que es lo que figura arriba, es casi igual a lo anterior pero con la primer tabla
Set oTable = HtmlDOC.body.getElementsByTagName("table")(0) 'Primera Tabla
i = 3
Set oTD = oTable.getElementsByTagName("td")
Debug.Print oTD(i).innertext, oTD(i + 1).innertext, oTD(i + 2).innertext
-
supongamos estas tablas del dia miercoles Hay dos almacenes para ese dia,Almacenes Bolt hay 3 y Almacenes Park hay 2
Fecha: 19/10/2016
Cod. Almacen Día
1 Almacen Bolt Miercoles
Item Productos Kgs.
''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''
Cod. Almacen Día
2 Almacen Bolt Miercoles
Item Productos Kgs.
''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''
Cod. Almacen Día
3 Almacen Bolt Miercoles
Item Productos Kgs.
''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''
Cod. Almacen Día
1 Almacen Park Miercoles
Item Productos Kgs.
''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''
Cod. Almacen Día
2 Almacen Park Miercoles
Item Productos Kgs.
''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''
-
Supongamos que Los almacenes son carpetas y sus codigos serias su sub-carpeta. Lo que quiero es extraer un solo almacen con sus sub-carpetas.
-
ya se complica, pero mejor pone el html asi es mas facil intentarlo.
-
Producto terminado para buscar cualquier almacen
Private Sub Form_Load()
WebBrowser1.Navigate (App.Path + "\PRUEBA.HTML")
Dim sHtml As String
Dim HtmlDOC As Object
Dim i As Long, j As Long
Dim oTable As Object, oTD As Object
Dim nTabla As Integer, nDato As Integer
Dim TablaNombre As String
Dim CodigoTabla As Integer
Dim InicioTabla As Integer
sHtml = ReadFile(App.Path + "\PRUEBA.HTML")
Set HtmlDOC = CreateObject("htmlfile_FullWindowEmbed")
HtmlDOC.body.innerHTML = sHtml
'determina cuantos Almacen Bolt hay y su ultimo codigo
nTabla = HtmlDOC.body.getElementsByTagName("table").length - 1
For j = 0 To nTabla Step 2
Set oTable = HtmlDOC.body.getElementsByTagName("table")(j)
Set oTD = oTable.getElementsByTagName("td")
TablaNombre = oTD(4).innerText
If TablaNombre = "Almacen Bolt" Then
CodigoTabla = oTD(3).innerText
If CodigoTabla = 1 Then InicioTabla = j
End If
Next j
If CodigoTabla > 0 Then
'muertra todos los Almacen Bolt de ese dia
For j = InicioTabla To (InicioTabla + (CodigoTabla * 2))
Set oTable = HtmlDOC.body.getElementsByTagName("table")(j + 0)
Set oTD = oTable.getElementsByTagName("td")
TablaNombre = oTD(4).innerText
If TablaNombre = "Almacen Bolt" Then
CodigoTabla = oTD(3).innerText
Set oTable = HtmlDOC.body.getElementsByTagName("table")(j + 1) 'Segunda Tabla
'de 0 a 2 son las cabeceras (Item Productos Kgs.)
For i = 3 To oTable.getElementsByTagName("td").length - 1 Step 3
Set oTD = oTable.getElementsByTagName("td")
Debug.Print oTD(i).innerText, oTD(i + 1).innerText, oTD(i + 2).innerText
Next i
End If
Next j
End If
End Sub
-
ahora bien si en la tabla de datos ponen un color al productor vencido.
<tr><td bgcolor="#AAAAAA">2</td><td bgcolor="#AAAAAA">Pollo</td><td bgcolor="#AAAAAA">90</td></tr>
entonces se aplica una condicion.
If oTD(i).bgColor <> "" Then
Producto = "VENCIDO"
Else
Producto = UCase(oTD(i + 1).innerText)
End If
-
hola se utiliza la función getAttribute() no estoy seguro si arroja un error si no esta presente el atributo o si devuelve 0, hace las pruebas correspondiente seria algo asi
oTD(i).getAttribute("bgColor")
-
a ok gracias por el consejo pero lo que puse me unciona de maravillas. Probare el tuyo tambien.