[VBA/Excel] HTML Table import problem (Active top)

Pagina: 1
Acties:

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Momenteel ben ik met Excel VBA aan het testen met het importeren van een Tabel (hierbij maak ik gebruik van MSHTML) op een website...

In dit geval is het de 'GOT active topics'. Tot op een zekere hoogte gaat alles goed... Topictitels, starter, replies, last post worden allemaal binnengehaald. Het enige wat niet binnenkomt is de Forumnaam (de eerste kolom)!? :?

Hieronder een stukje van de code waar het probleem naar mijn idee zit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
    For Each itfTable In itfDoc.getElementsByTagName("TABLE")
      lngRow = 0
      For Each itfTableRow In itfTable.Rows
        lngColumn = 0
        For Each itfTableCell In itfTableRow.Cells
            Cells(lngRow, lngColumn) = itfTableCell.innerText
            'Debug.Print itfTableCell.innerText
            lngColumn = lngColumn + 1
        Next itfTableCell
        lngRow = lngRow + 1
      Next itfTableRow
    Next itfTable

Omdat de code alleen niet genoeg is, hier het bestand waar het omgaat.
Klik hier om te downloaden (rechtermuis, save target as).

Om het importeren van de Active Topics te starten moet je naar Tools --> Macro --> Macro's (showForm). Dan krijg je een formpje met een klein beetje uitleg en submit button.

Afbeeldingslocatie: http://picserv.mediamonks.net/pics/ETRMMRSMHHE

Ik hoop dat jullie me kunnen helpen, want ik kom er echt niet meer uit :? :'(

[ Voor 4% gewijzigd door Woudloper op 18-09-2005 23:30 ]


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Mocht er iemand weten hoe ik het anders kan doen (XML) of zo, kan die het mij dan uitleggen...

Of is het zo dat een leverancier van de data XML moet ondersteunen :? Ikzelf gebruik nu even GoT als voorbeeld, maar het is niet het uiteindelijk doel...

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Schop >:)

Niemand met een beetje een kerstgedachte :)

Ik snap het namelijk echt niet....

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Na veel puzzelen, debug.print en trail/error ben ik erachter gekomen!?

Mijn gehele functie ziet er uit als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Private Sub GetData()
    Dim itfDocument As MSHTML.IHTMLDocument
    Dim itfDoc       As MSHTML.HTMLDocument
    Dim itfTable       As MSHTML.IHTMLTable
    Dim itfTableRow As MSHTML.IHTMLTableRow
    Dim itfTableCell     As MSHTML.HTMLTableCell
     
    On Error Resume Next
    Sheets("TweakNet").Activate
    If Err.Number <> 0 Then
      MsgBox "This function needs a sheet named 'TweakNet'." & vbCrLf & "This sheet will be cleared and new TweakNet values will be inserted.", vbOKOnly, "TweakTracker status"
      Exit Sub
    End If
    
    Set itfIE = New InternetExplorer
    blnDocComplete = False
    
    'Browse to the TweakNet page...
    itfIE.navigate "http://gathering.tweakers.net/forum/find#hitstart
    Do While Not blnDocComplete
      DoEvents
    Loop
    blnDocComplete = False

    Set itfDoc = itfIE.document
    
    Dim lngRow      As Long
    Dim lngColumn    As Long
    Dim lngCalculation  As Long
    
    Sheets("TweakNet").Activate
    lngCalculation = Application.Calculation
    Application.Calculation = xlCalculationManual
    
    Cells.Select
    Selection.ClearContents
    DoEvents
    
    lngRow = 1
    lngColumn = 1
    
    For Each itfTable In itfDoc.getElementsByTagName("TABLE")
      lngRow = 1
      For Each itfTableRow In itfTable.Rows
        lngColumn = 1
        For Each itfTableCell In itfTableRow.Cells
            Cells(lngRow, lngColumn) = itfTableCell.innerText
            Debug.Print itfTableCell.innerText
            lngColumn = lngColumn + 1
        Next itfTableCell
        lngRow = lngRow + 1
      Next itfTableRow
    Next itfTable
  
    DoEvents
    Application.Calculation = lngCalculation
    Application.Calculate
    Unload Me

End Sub

Jammer, dat zo'n php funtie er niet is voor VB/VBA

Binnen dit stukje code, was ik ervan uitgegaan dat de kolommen/rijen binnen Excel begonnen met 0, maar dat is niet zo! De kolommen binnen Excel beginnen met de indexwaarde 1.

Nog één vraagje
Nu heb ik nog één vraagje!? Weet iemand hoe ik alleen de titel van het onderwerp kan ophalen en niet de extra informatie over hoeveel topics het lang is :? :?

Verwijderd

Op maandag 24 december 2001 10:29 schreef rwoudsma het volgende:
Nog één vraagje
Nu heb ik nog één vraagje!? Weet iemand hoe ik alleen de titel van het onderwerp kan ophalen en niet de extra informatie over hoeveel topics het lang is :? :?
Aan de hand van [topic=359904/1/25] antwoord ik maar leek me gepaster om hier te antwoorden.

In jouw code haal je van iedere cel in de buitenste tabel de tekst op. Als hierbinnen dingen staan die je niet wil ophalen zal je een manier moeten vinden om die kolommen eruit te filteren.

Aangezien ik geen zin heb om de HTML zelf te gaan doorspitten zal je dat zelf even moeten doen. Er is op zich niets mis met je MSHTML code.

HTH :)

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Topicstarter
Op donderdag 27 december 2001 17:48 schreef MrX het volgende:

[..]

Aan de hand van [topic=359904/1/25] antwoord ik maar leek me gepaster om hier te antwoorden.

[..]

Aangezien ik geen zin heb om de HTML zelf te gaan doorspitten zal je dat zelf even moeten doen. Er is op zich niets mis met je MSHTML code.

HTH :)
Thanx hiervoor... Dan weet ik dat ik op een één of andere manier ervoor moet zorgen dat ik mits ik zoiets wil gebruiken ik het topictitel moet strippen....

Ga er wel even mee verder.... Moet ook nog even kijken of ik de Active Topics met XML kan parsen... Heb alleen de ballen verstand hiervan... Zal wel niet zo ingewikkeld zijn :?
Pagina: 1