Avatar billede friis5 Novice
22. juni 2011 - 13:25 Der er 3 kommentarer og
1 løsning

Hente csv fil fra hjemmeside.

Hej Eksperten.dk

Jeg søger noget kode, som kan hente følgende csv-filen fra følgende hjemmeside:

http://www.invescopowershares.com/products/holdings.aspx?ticker=QQQ

Hvis nogen kan fifle det direkte link ud af siden, ville dette selvfølgelig være endnu mere optimalt.

Har prøvet lidt af hvert angående, at få hentet linket via vba, men er endnu ikke stødt på en metode der virker.

Excel: 2003 SP3 (11.8332.8333)
IE: 7 (7.0.5730.13)
XP: SP3

Håber I kan hjælpe :)
Avatar billede supertekst Ekspert
23. juni 2011 - 15:08 #1
Forslag:
Koden indsættes under Ark1 - 3 kolonner kopieres til Ark2
Udarbejdet i Excel 2007


Const søgeOrd = " Download"
Public Sub hentFraWWW()
Dim sidsteRække As Long, sidsteKolonne As Long
Dim basisCelle, basiskolonne, pctRække As Long, pctKolonne, førstePct As Long, sidstePct As Long
    Application.ScreenUpdating = False

Rem slet gl. indhold
    ActiveSheet.Cells.ClearContents
   
Rem hent fra WWW
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.invescopowershares.com/products/holdings.aspx?ticker=QQQ", _
        Destination:=Range("$A$1"))
        .Name = "holdings.aspx?ticker=QQQ"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
   
    sidsteRække = ActiveCell.SpecialCells(xlLastCell).Row
    sidsteKolonne = ActiveCell.SpecialCells(xlLastCell).Column
   
    basisCelle = findCelleAdr(søgeOrd, "A1:IV" & sidsteRække)              'med teksten "Download"
   
    If basisCelle <> "" Then
        Range(basisCelle).Select
        basiskolonne = konverterTilBogstav(Selection.Column)
        pctKolonne = konverterTilBogstav(Selection.Offset(0, 2).Column)
        pctRække = Selection.Row
       
        førstePct = findCelleRæk("%", pctKolonne & CStr(pctRække) & ":" & pctKolonne & CStr(sidsteRække))
        sidstePct = søgSidstePct(pctKolonne & CStr(sidsteRække))
       
        Range(basiskolonne & førstePct & ":" & pctKolonne & sidstePct).Select
        Selection.Copy
       
Rem 3 kolonner kopieres til ark2
        Worksheets("Ark2").Activate
        ActiveSheet.Range("A1").Select
        ActiveSheet.Paste
       
        Application.CutCopyMode = False
        ActiveSheet.Range("A1").Select
       
        Application.ScreenUpdating = True
    End If
End Sub
Private Function findCelleAdr(søgEfter, område)
    With ActiveSheet.Range(område)
        Set c = .Find(søgEfter, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            findCelleAdr = c.Address
        Else
            findCelleAdr = ""
        End If
    End With
End Function
Private Function findCelleRæk(søgEfter, område)
    With ActiveSheet.Range(område)
        Set c = .Find(søgEfter, LookIn:=xlValues, LookAt:=xlPart)
        If Not c Is Nothing Then
            findCelleRæk = c.Row
        Else
            findCelleRæk = ""
        End If
    End With
End Function
Private Function konverterTilBogstav(kolonneNr)
Dim adr As String, p As Integer
   
    adr = Mid(ActiveSheet.Cells(1, kolonneNr).Address, 2)
    p = InStr(adr, "$")
    If p > 0 Then
        konverterTilBogstav = Left(adr, p - 1)
        Exit Function
    Else
        konverterTilBogstav = ""
    End If
End Function
Private Function søgSidstePct(startCelle)
    Range(startCelle).Select
   
    While InStr(ActiveCell.Text, "%") = 0
        ActiveCell.Offset(-1, 0).Select
    Wend
   
    søgSidstePct = ActiveCell.Row
End Function
Avatar billede friis5 Novice
24. juni 2011 - 15:21 #2
Tak for en super god løsning, omend det ikke helt er løsningen på min problemstilling.

Den csv fil man henter fra siden indeholder mere data end hvad siden umiddelbart byder en. Derfor er det ikke nok, at hente siden ned.

Jeg skal på en eller anden måde have fat i den underliggende csv fil (altså den der fremkommer ved tryk på download knappen).

Men mange tak for hjælpen.
Avatar billede supertekst Ekspert
24. juni 2011 - 15:38 #3
Ok & selv tak
Avatar billede friis5 Novice
12. oktober 2012 - 11:17 #4
Lukker denne tråd - uden løsning
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester