2017-02-22 3 views
0

Ich dachte, ich hätte das über das Wochenende herausgefunden, aber es funktioniert tatsächlich nicht so, wie ich dachte. Ich habe eine vertrauliche Corporate SharePoint-Website, mit der ich arbeite. Ich kann hier weder den Link noch irgendwelche spezifischen Daten posten, aber das unten stehende Konzept wird den Punkt verdeutlichen.Wie kann ich Daten von einer untergeordneten URL importieren?

Ich habe eine übergeordnete URL, von der ich Daten importieren möchte. Angenommen, dies ist die übergeordnete URL.

http://www.sharenet.co.za/v3/q_sharelookup.php

Von dort möchte ich Daten von einem bestimmten Link importieren. Sagen wir, das ist der Link: 'Gebäude & Baumaterial'

Ich denke, der beste Weg, dies zu tun ist eine Art von InStr() -Funktion und Suche nach der Zeichenfolge. Klicken Sie anschließend auf den Link und öffnen Sie die untergeordnete URL. Wenn das Kind URL öffnet, sieht es so etwas wie dieses:

http://www.sharenet.co.za/v3/sharesfound.php?ssector=2353&exch=JSE&bookmark=Building%20&%20Construction%20Materials&scheme=default

Ich kann nicht sagen, was die Sektornummern vor der Zeit sein wird, so kann ich nicht eine bestimmte URL verwenden. Ich muss es als Elternteil und Kind oder vielleicht IE1 und IE2 bezeichnen. Ich möchte alle Daten von der untergeordneten URL importieren, die in diesem Beispiel so aussieht.

Name Full Name Code Sector 
BUILDMX  BUILDMAX LIMITED  BDM  2353 
KAYDAV  KAYDAV GROUP LTD  KDV  2353 
AFRIMAT  AFRIMAT LTD AFT  2353 
Trellidor  Trellidor Hldgs Ltd TRL  2353 
MASONITE MASONITE (AFRICA) LIMITED  MAS  2353 
DAWN DISTRIBUTION AND WAREHOUSING NETWORK LIMITED  DAW  2353 
MAZOR  MAZOR GROUP LTD MZR  2353 
PPC  PPC LIMITED PPC  2353 
PPCN PPC Limited NPL PPCN 2353 

Nur um zu demonstrieren, wie ich versuchte, dies zu lösen, versuchte ich das Skript unten.

Sub ListLinks() 

'Set a reference to microsoft Internet Controls 
Dim IeApp As InternetExplorer 
Dim sURL As String 
Dim IeDoc As Object 
Dim i As Long 

Set IeApp = New InternetExplorer 

IeApp.Visible = True 

sURL = "http://www.sharenet.co.za/v3/q_sharelookup.php" 

IeApp.Navigate sURL 

Do 
Loop Until IeApp.ReadyState = READYSTATE_COMPLETE 
Set IeDoc = IeApp.Document 

For i = 0 To IeDoc.Links.Length - 1 
    Cells(i + 1, 1).Value = IeDoc.Links(i).href 
Next i 

Set IeApp = Nothing 
End Sub 

Ich dachte, es würde funktionieren, alle URLs aufzulisten, und dann die Schleife durch jede Daten zu importieren, aber das Problem auf meine Sharepoint-Website ist, dass die href keine Relevanz für den Namen zu haben scheint des Hyperlinks.

enter image description here

In der obigen Abbildung können Sie 'Gebäude & Baumaterial' in dem TD-Elemente sehen. Wenn ich das im 1. Browser referenzieren kann und auf den richtigen Link klicke, um einen zweiten Browser zu öffnen, und dann den zweiten Browser referenziere und alle TD-Elemente davon abkratze, sollte alles gut funktionieren. Weiß jemand hier, wie man das macht?

Antwort

2

Guter Versuch auf den Code, habe es ziemlich nah - der eine Bereich, der etwas Fixierung benötigt, ist, wenn Sie versuchen, die Liste der Elemente zu bekommen und es zu loopen. Sie hatte die richtige Idee, wie es funktionieren würde, aber das HTML-Element Syntaxen ein wenig aus sieht so wie nur etwas mehr Erfahrung brauchen HTML-Objekte mit ... siehe unten Beispielcode:

Public Sub sampleCode() 
Dim URL As String 
Dim XMLHTTP As MSXML2.XMLHTTP60 
Dim HTMLDoc_Main As HTMLDocument 
Dim HTMLDoc_Secondary As HTMLDocument 
Dim targetTable As HTMLObjectElement 
Dim links As IHTMLElementCollection 
Dim linkCounter As Long 

Dim searchText As String 

URL = "http://www.sharenet.co.za/v3/q_sharelookup.php" 
searchText = "Building & Construction Materials" 

Set XMLHTTP = New MSXML2.XMLHTTP60 
Set HTMLDoc_Main = New HTMLDocument 
With XMLHTTP 
    .Open "GET", URL, False 
    .send 
    While .readyState <> 4: Wend 
    HTMLDoc_Main.body.innerHTML = .responseText 
End With 

Set targetTable = HTMLDoc_Main.getElementsByClassName("dataTable")(0) 
Set links = targetTable.getElementsByTagName("a") 
For linkCounter = 0 To links.Length - 1 
    With links(linkCounter) 
     If InStr(1, .innerText, searchText) > 0 Then 
      Set XMLHTTP = New MSXML2.XMLHTTP60 
      Set HTMLDoc_Secondary = New HTMLDocument 
      XMLHTTP.Open "GET", .href, False 
      XMLHTTP.send 
      While XMLHTTP.readyState <> 4: Wend 
      HTMLDoc_Secondary.body.innerHTML = XMLHTTP.responseText 
      'Parse HTMLDoc_Secondary 
     End If 
    End With 
Next 

Set XMLHTTP = Nothing 
Set HTMLDoc_Main = Nothing 
Set HTMLDoc_Secondary = Nothing 
End Sub 

Paar Notes- 1) Ich habe XMLHTTPRequest anstelle von IE verwendet, da es schneller ist. 2) Sie müssen "Microsoft HTML Object Library" und "Microsoft XML, v6.0" zu Ihren Referenzen hinzufügen und 3) Ich kann sehen, dass Sie Bereiche ausgeben Ihr ursprünglicher Code - wenn möglich, sollte dies vermieden werden. Füllen Sie ein Feld und dann Dump den gesamten Inhalt aus in dem Zielblatt auf einmal Zeit zu sparen ...

hoffte, das hilft, TheSilkCode

+0

Ich glaube, das funktioniert. Ich werde es versuchen, wenn ich ins Büro komme. Vielen Dank!! – ryguy72

+0

Sie wissen, dass das in meinem Testsample funktioniert hat, aber ich kann es nicht in meiner tatsächlichen SharePoint-Website arbeiten. HTMLDoc_Main.body.innerHTML ist zu groß, um in eine Zelle zu passen, und zu groß, um im Direktfenster angezeigt zu werden.Ich möchte nach diesem Text in der übergeordneten URL suchen: "Fragebogen hochladen" und kopieren Sie Folgendes in Zelle C2: href = "https: //blah_blah/SitePages/blah_blah_blah_TaskListHome.aspx". Es sollte "TD class = ms-vb" sein, aber es scheint, als ob das Skript das nicht finden könnte .. Irgendwelche Ideen? – ryguy72

Verwandte Themen