Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: obethermy en Octubre 27, 2016, 03:55:57 pm

Título: Como trabajar con tablas html en visual basic 6
Publicado 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
Código: [Seleccionar]
<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.
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: LeandroA en Octubre 29, 2016, 10:05:35 am
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
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: obethermy en Octubre 29, 2016, 12:30:50 pm
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.
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: zxs23 en Octubre 29, 2016, 10:54:37 pm
Creo que si quieres obtener informacion de una pagina web si recuerdo bien era utilizando la propiedad getelementbyid del control webbrowser
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: obethermy en Octubre 29, 2016, 11:18:26 pm
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.
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: LeandroA en Octubre 30, 2016, 02:24:49 am
hola yo lo haria asi, utilizando el objeto htmlfile_FullWindowEmbed que es muy útil para parsear html

Código: (vb) [Seleccionar]
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
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: obethermy en Octubre 30, 2016, 02:25:49 pm
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.
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: obethermy en Octubre 30, 2016, 02:55:22 pm
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
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: LeandroA en Octubre 31, 2016, 12:14:14 am
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

Código: [Seleccionar]
    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

Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: obethermy en Octubre 31, 2016, 09:16:38 am
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.
''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: obethermy en Octubre 31, 2016, 09:33:44 am
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.
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: LeandroA en Octubre 31, 2016, 09:38:10 am
ya se complica, pero mejor pone el html asi es mas facil intentarlo.
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: obethermy en Noviembre 03, 2016, 11:29:08 am
Producto terminado para buscar cualquier almacen

Código: (VB) [Seleccionar]
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
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: obethermy en Noviembre 07, 2016, 06:03:02 pm
ahora bien si en la tabla de datos ponen un color al productor vencido.
Código: (PHP) [Seleccionar]
<tr><td bgcolor="#AAAAAA">2</td><td bgcolor="#AAAAAA">Pollo</td><td bgcolor="#AAAAAA">90</td></tr>
entonces se aplica una condicion.
Código: (VB) [Seleccionar]
If oTD(i).bgColor <> "" Then
         Producto = "VENCIDO"
        Else
         Producto = UCase(oTD(i + 1).innerText)
        End If
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: LeandroA en Noviembre 09, 2016, 12:52:07 am
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")
Título: Re:Como trabajar con tablas html en visual basic 6
Publicado por: obethermy en Noviembre 09, 2016, 11:38:40 am
a ok gracias por el consejo pero lo que puse me unciona de maravillas. Probare el tuyo tambien.