Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提取html标记中的文本并将其作为表标题_Html_Excel_Vba - Fatal编程技术网

提取html标记中的文本并将其作为表标题

提取html标记中的文本并将其作为表标题,html,excel,vba,Html,Excel,Vba,现在,表标题设置为 tblNameArr = Array("Balance Sheet", "Cash Flow", "Header 3", "Header 4") 如何根据html标记中的文本更改四个表标题的名称 e、 g.我想将第一个表名更改为重要财务指标 名称为a1,id也为a1,并将下表名称更改为资产负债表, 现金流量表 和综合损益表 相应地 请参考下面的html代码 Sub GetFinanceData() For x = 1 To 10 Dim URL As String, ele

现在,表标题设置为

tblNameArr = Array("Balance Sheet", "Cash Flow", "Header 3", "Header 4")
如何根据html标记中的文本更改四个表标题的名称

e、 g.我想将第一个表名更改为重要财务指标 名称为a1,id也为a1,并将下表名称更改为资产负债表, 现金流量表 和综合损益表 相应地

请参考下面的html代码

Sub GetFinanceData()
For x = 1 To 10
Dim URL As String, elemCollection As Object
Dim t As Integer, r As Integer, c As Integer

Worksheets("Stocks").Select
Worksheets("Stocks").Activate

'Open IE and Go to the Website

URL = "http://stock.finance.sina.com.cn/hkstock/finance/00001.html"
URL = Cells(x, 1)

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

    Do While .Busy = True Or .readyState <> 4
        Loop
    DoEvents

Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = _
ThisWorkbook.Worksheets("Stocks").Range("B" & x).Value     'You could even simplify it and just state the name as Cells(x,2)


'Select the Report Type

Set selectItems = IE.Document.getElementsByTagName("select")
    For Each i In selectItems
        i.Value = "zero"
        i.FireEvent ("onchange")
        Application.Wait (Now + TimeValue("0:00:05"))
    Next i

    Do While .Busy: DoEvents: Loop

ActiveSheet.Range("A1:K500").ClearContents

ActiveSheet.Range("A1").Value = .Document.getElementsByTagName("h1")(0).innerText
ActiveSheet.Range("B1").Value = .Document.getElementsByTagName("em")(0).innerText

'Find and Get Table Data

tblNameArr = Array("Balance Sheet", "Cash Flow", "Header 3", "Header 4")
tblStartRow = 5
Set elemCollection = .Document.getElementsByTagName("TABLE")
For t = 0 To elemCollection.Length - 1
    For r = 0 To (elemCollection(t).Rows.Length - 1)
        For c = 0 To (elemCollection(t).Rows(r).Cells.Length - 1)
        ActiveSheet.Cells(r + tblStartRow, c + 1) = elemCollection(t).Rows(r).Cells(c).innerText
    Next c
Next r

ActiveSheet.Cells(r + tblStartRow + 2, 1) = tblNameArr(t)
tblStartRow = tblStartRow + r + 4

Next t

End With

' cleaning up memory

IE.Quit

Next x


End Sub
以下是html代码:

<!--重要财务指标 start-->
<a name="a1" id="a1"></a>
<div class="part02">
  <div class="sub01">
      <div class="sub01_tt fblue">
          <span class=" selected"><a href="#a1" target="_self">重要财务指标</a></span>
          <span class=""><a href="#a2" target="_self">资产负债表</a></span>
          <span class=""><a href="#a3" target="_self">现金流量表</a></span>
          <span class=""><a href="#a4" target="_self">综合损益表</a></span>
          <em class="rt">报表类型:<select class="fgrey" style="width:100px;" interface="getFinanceStandardForjs?symbol=$symbol&financeStanderd=" table="tableGetFinanceStandard" onchange="selectData(this);">
            <option value="all" >全部</option>
            <option value="zero" >年报</option>
            <option value="1" >中报</option>
            <option value="2" >一季报</option>
            <option value="3" >三季报</option>
        </select></em>
    </div>

由标记创建的元素为空。它只是一个链接锚。它不包含任何内容。所以获取这个元素是无用的

一种方法可以是,运行所有A元素并选择那些引用href=a1、href=a2的元素

例如:

...

nameBalanceSheet = "Balance Sheet"
nameCashFlow = "Cash Flow"
nameHeader3 = "Header 3"
nameHeader4 = "Header 4"

Set elemCollection = .Document.getElementsByTagName("A")
For i = 0 To elemCollection.Length - 1
 If Right(elemCollection(i).href, 3) = "#a1" Then
  nameBalanceSheet = elemCollection(i).innerText
 ElseIf Right(elemCollection(i).href, 3) = "#a2" Then
  nameCashFlow = elemCollection(i).innerText
 ElseIf Right(elemCollection(i).href, 3) = "#a3" Then
  nameHeader3 = elemCollection(i).innerText
 ElseIf Right(elemCollection(i).href, 3) = "#a4" Then
  nameHeader4 = elemCollection(i).innerText
 End If
Next

tblNameArr = Array(nameBalanceSheet, nameCashFlow, nameHeader3, nameHeader4)

...

您是否尝试过tblNameArr=Array.Document.getElementByIda1.innerText、现金流、标题3、标题4?我刚刚替换了数组的第一个元素,但你明白了。编辑:抱歉,id a1不包含您要查找的表标题,对吗?编辑2你想要这个吗?我还尝试了tblNameArr=Array.Document.getElementByIda1.innerText,但它不起作用。对重要财务指标 这正是我想要用作表标题的内容,但是它的标记名包含太多属性,因此我不知道如何获取innerText。当我尝试str=ie.document.getElementsByTagneMobody0.innerText时,我得到了结果,但是重要财务指标 将被表示为??????。我不知道如何使用你的语言。嗨,Hubvill,我来自香港,这是中文,也许你的操作系统不支持中文,谢谢你的建议,我现在尝试抱歉,但它不起作用…它工作完美!谢谢阿克塞尔!请你也看看我的新问题好吗?谢谢~链接: