我想从网页上提取数据,但最后我无法在工作表中写入数据。数据是表格形式(多行,col)?

问题描述 投票:2回答:2

无法从网页中提取数据,也无法在工作表中写入数据。

在pulldata()下

'宣言

Dim IE As Object
Dim doc As HTMLDocument

'开始申请

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True

'导航

IE.navigate "https://nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?segmentLink=17&instrument=OPTIDX&symbol=NIFTY&date=25APR2019"

'循环直到加载页面

Do While IE.Busy Or IE.readyState <> 4
Application.Wait DateAdd("s", 1, Now)
Loop

'将数据放入网页并点击提交

Set doc = IE.document

doc.getElementById("underlyStock").Value = ThisWorkbook.Sheets("URLList").Range("A2").Value
doc.parentWindow.execScript "goBtnClick('stock');", "javascript"

'循环直到加载页面

Do While IE.Busy Or IE.readyState <> 4
Application.Wait DateAdd("s", 1, Now)
Loop

'从表格的元素id-“拉取数据”到sheet-“nse”

strVal = doc.getElementById("octable").innerText
ThisWorkbook.Sheets("nse").Range("A1").Offset(r, 0).Value = strVal
r = r + 1

结束子

我想在nse表(工作表名称)中的表数据。

excel vba
2个回答
0
投票

可能会尝试这样的事情,我只尝试使用Nifty Data,因为我不知道底层符号,除了SBI的“SBIN”,它还提供页面“内部服务器错误 - 读取”即使在手动冲浪(可能是由于它是星期天)。

可以尝试使用您的基础符号(可能在适当的时候)

码:

Sub pulldata()
'declaration
Dim IE As Object
Dim doc As HTMLDocument
'start application
Dim Tbl As HTMLTable, Cel As HTMLTableCell, Rw As HTMLTableRow, Col As HTMLTableCol
Dim TrgRw As Long, TrgCol As Long



Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
'navigation

IE.navigate "https://nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?segmentLink=17&instrument=OPTIDX&symbol=NIFTY&date=25APR2019"
'loop until load page

Do While IE.Busy Or IE.readyState <> 4
Application.Wait DateAdd("s", 1, Now)
Loop
'put data in webpage and click on submit

Set doc = IE.document

'doc.getElementById("underlyStock").Value = ThisWorkbook.Sheets("URLList").Range("A2").Value
'doc.parentWindow.execScript "goBtnClick('stock');", "javascript"
'loop until load page

Do While IE.Busy Or IE.readyState <> 4
Application.Wait DateAdd("s", 1, Now)
Loop
'pull data from elementid- "octable" to sheet- "nse"

Set Tbl = doc.getElementById("octable")


TrgRw = 1
    For Each Rw In Tbl.Rows
    TrgCol = 1
        For Each Cel In Rw.Cells
        ThisWorkbook.Sheets("nse").Cells(TrgRw, TrgCol).Value = Cel.innerText
        TrgCol = TrgCol + Cel.colSpan   ' if Column span is > 1 multiple
        Next Cel
    TrgRw = TrgRw + 1
    Next Rw
End Sub

0
投票

我遇到的问题与@AhmedAU提到的内部服务器错误相同。

如果这解决了,请考虑使用来自Web工具的内置数据。工具>数据>从Web>将URL添加到包含您的符号的地址栏,例如

https://nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?segmentLink=17&instrument=OPTIDX&symbol=ACC&date=25APR2019

按GO。离开片刻,然后选择您想要的表并导入。该表将导入Excel。

在早期版本的Excel中,您可能需要从Microsoft下载免费电源查询加载项,并使用“电源查询”选项卡执行相同的任务。

© www.soinside.com 2019 - 2024. All rights reserved.