【问题标题】:Copy table data from web page to excel sheet将表格数据从网页复制到 Excel 工作表
【发布时间】:2014-12-17 07:27:55
【问题描述】:

我正在使用 Excel 宏从在线 Intranet Web 计算网站复制计算结果数据。

对于该计算,我必须向网页添加许多数据。我使用宏来自动将数据输入网页,最后我可以访问结果页面。计算结果为表格形式。现在我想将该结果数据以表格形式复制到 Excel 工作表中。 我尝试了网络查询,但这不起作用,因为结果网页不能直接通过地址加载。

以下是我要提取的html表格的来源。

 
      <P>
        <BR>
        <TABLE width="80%">
          <TR>
            <TD bgcolor="#ffffff" align="center"><b>Life Calculation Result</b>
            </TD>
          </TR>
        </TABLE>
        <P>
          <TABLE cellspacing="1" cellpadding="0">
            <TR align="center">
              <TH colspan="6"></TH>
              <TH colspan="3" align="center">--- Inboard ---</TH>
              <TH></TH>
              <TH colspan="3" align="center">--- outboard ---</TH>
              <TH></TH>
              <TH colspan="3" align="center">--- System ---</TH>
            </TR>
            <TR align="center">
              <TH>No.</TH>
              <TH width="10"></TH>
              <TH>Displacement</TH>
              <TH width="10"></TH>
              <TH>Preload</TH>
              <TH width="10"></TH>
              <TH>Running
                <BR>Distance</TH>
              <TH width="10"></TH>
              <TH>Total
                <BR>Number of
                <BR>Revolutions</TH>
              <TH width="10"></TH>
              <TH>Running
                <BR>Distance</TH>
              <TH width="10"></TH>
              <TH>Total
                <BR>Number of
                <BR>Revolutions</TH>
              <TH width="10"></TH>
              <TH>Running
                <BR>Distance</TH>
              <TH width="10"></TH>
              <TH>Total
                <BR>Number of
                <BR>Revolutions</TH>
            </TR>
            <TR align="center">
              <TH></TH>
              <TH></TH>
              <TH>[mm]</TH>
              <TH></TH>
              <TH>[N]</TH>
              <TH></TH>
              <TH>[10<sup><font size="-1">4<font></sup>km]</TH>
              <TH></TH>
              <TH>[10<sup><font size="-1">6<font></sup>rev.]</TH>
              <TH></TH>
              <TH>[10<sup><font size="-1">4<font></sup>km]</TH>
              <TH></TH>
              <TH>[10<sup><font size="-1">6<font></sup>rev.]</TH>
              <TH></TH>
              <TH>[10<sup><font size="-1">4<font></sup>km]</TH>
              <TH></TH>
              <TH>[10<sup><font size="-1">6<font></sup>rev.]</TH>
            </TR>
            <TR align="right">
              <TH>(1)</TH>
              <TD></TD>
              <TD>0.594874</TD>
              <TD></TD>
              <TD></TD>
              <TD></TD>
              <TD>3.492e+004</TD>
              <TD></TD>
              <TD>1.705e+005</TD>
              <TD></TD>
              <TD>9.796e+004</TD>
              <TD></TD>
              <TD>4.782e+005</TD>
              <TD></TD>
              <TD>2.710e+004</TD>
              <TD></TD>
              <TD>1.323e+005</TD>
            </TR>
            <TR align="right">
              <TH>(2)</TH>
              <TD></TD>
              <TD>0.604874</TD>
              <TD></TD>
              <TD></TD>
              <TD></TD>
              <TD>4.001e+004</TD>
              <TD></TD>
              <TD>1.953e+005</TD>
              <TD></TD>
              <TD>1.033e+005</TD>
              <TD></TD>
              <TD>5.045e+005</TD>
              <TD></TD>
              <TD>3.042e+004</TD>
              <TD></TD>
              <TD>1.485e+005</TD>
            </TR>
            <TR align="right">
              <TH>(3)</TH>
              <TD></TD>
              <TD>0.614874</TD>
              <TD></TD>
              <TD>0.00</TD>
              <TD></TD>
              <TD>4.751e+004</TD>
              <TD></TD>
              <TD>2.320e+005</TD>
              <TD></TD>
              <TD>1.088e+005</TD>
              <TD></TD>
              <TD>5.314e+005</TD>
              <TD></TD>
              <TD>3.495e+004</TD>
              <TD></TD>
              <TD>1.706e+005</TD>
            </TR>
            <TR align="right">
              <TH>(4)</TH>
              <TD></TD>
              <TD>0.630867</TD>
              <TD></TD>
              <TD>1000.00</TD>
              <TD></TD>
              <TD>3.003e+004</TD>
              <TD></TD>
              <TD>1.466e+005</TD>
              <TD></TD>
              <TD>3.941e+004</TD>
              <TD></TD>
              <TD>1.924e+005</TD>
              <TD></TD>
              <TD>1.813e+004</TD>
              <TD></TD>
              <TD>8.854e+004</TD>
            </TR>
            <TR align="right">
              <TH>(5)</TH>
              <TD></TD>
              <TD>0.639982</TD>
              <TD></TD>
              <TD>2000.00</TD>
              <TD></TD>
              <TD>7.425e+003</TD>
              <TD></TD>
              <TD>3.625e+004</TD>
              <TD></TD>
              <TD>7.893e+003</TD>
              <TD></TD>
              <TD>3.853e+004</TD>
              <TD></TD>
              <TD>4.075e+003</TD>
              <TD></TD>
              <TD>1.989e+004</TD>
            </TR>
            <TR align="right">
              <TH>(6)</TH>
              <TD></TD>
              <TD>0.647481</TD>
              <TD></TD>
              <TD>3000.00</TD>
              <TD></TD>
              <TD>2.523e+003</TD>
              <TD></TD>
              <TD>1.232e+004</TD>
              <TD></TD>
              <TD>2.592e+003</TD>
              <TD></TD>
              <TD>1.266e+004</TD>
              <TD></TD>
              <TD>1.362e+003</TD>
              <TD></TD>
              <TD>6.648e+003</TD>
            </TR>
            <TR align="right">
              <TH>(7)</TH>
              <TD></TD>
              <TD>0.654070</TD>
              <TD></TD>
              <TD>4000.00</TD>
              <TD></TD>
              <TD>1.131e+003</TD>
              <TD></TD>
              <TD>5.521e+003</TD>
              <TD></TD>
              <TD>1.148e+003</TD>
              <TD></TD>
              <TD>5.605e+003</TD>
              <TD></TD>
              <TD>6.068e+002</TD>
              <TD></TD>
              <TD>2.962e+003</TD>
            </TR>
            <TR align="right">
              <TH>(8)</TH>
              <TD></TD>
              <TD>0.660043</TD>
              <TD></TD>
              <TD>5000.00</TD>
              <TD></TD>
              <TD>6.007e+002</TD>
              <TD></TD>
              <TD>2.933e+003</TD>
              <TD></TD>
              <TD>6.065e+002</TD>
              <TD></TD>
              <TD>2.961e+003</TD>
              <TD></TD>
              <TD>3.214e+002</TD>
              <TD></TD>
              <TD>1.569e+003</TD>
            </TR>
            <TR align="right">
              <TH>(9)</TH>
              <TD></TD>
              <TD>0.665559</TD>
              <TD></TD>
              <TD>6000.00</TD>
              <TD></TD>
              <TD>3.570e+002</TD>
              <TD></TD>
              <TD>1.743e+003</TD>
              <TD></TD>
              <TD>3.593e+002</TD>
              <TD></TD>
              <TD>1.754e+003</TD>
              <TD></TD>
              <TD>1.907e+002</TD>
              <TD></TD>
              <TD>9.311e+002</TD>
            </TR>
            <TR align="right">
              <TH>(10)</TH>
              <TD></TD>
              <TD>0.670717</TD>
              <TD></TD>
              <TD>7000.00</TD>
              <TD></TD>
              <TD>2.296e+002</TD>
              <TD></TD>
              <TD>1.121e+003</TD>
              <TD></TD>
              <TD>2.307e+002</TD>
              <TD></TD>
              <TD>1.126e+003</TD>
              <TD></TD>
              <TD>1.226e+002</TD>
              <TD></TD>
              <TD>5.983e+002</TD>
            </TR>
            <TR align="right">
              <TH>(11)</TH>
              <TD></TD>
              <TD>0.675584</TD>
              <TD></TD>
              <TD>8000.00</TD>
              <TD></TD>
              <TD>1.566e+002</TD>
              <TD></TD>
              <TD>7.646e+002</TD>
              <TD></TD>
              <TD>1.571e+002</TD>
              <TD></TD>
              <TD>7.671e+002</TD>
              <TD></TD>
              <TD>8.354e+001</TD>
              <TD></TD>
              <TD>4.078e+002</TD>
            </TR>
            <TR align="right">
              <TH>(12)</TH>
              <TD></TD>
              <TD>0.680208</TD>
              <TD></TD>
              <TD>9000.00</TD>
              <TD></TD>
              <TD>1.117e+002</TD>
              <TD></TD>
              <TD>5.455e+002</TD>
              <TD></TD>
              <TD>1.120e+002</TD>
              <TD></TD>
              <TD>5.469e+002</TD>
              <TD></TD>
              <TD>5.958e+001</TD>
              <TD></TD>
              <TD>2.909e+002</TD>
            </TR>
            <TR align="right">
              <TH>(13)</TH>
              <TD></TD>
              <TD>0.684622</TD>
              <TD></TD>
              <TD>10000.00</TD>
              <TD></TD>
              <TD>8.262e+001</TD>
              <TD></TD>
              <TD>4.034e+002</TD>
              <TD></TD>
              <TD>8.278e+001</TD>
              <TD></TD>
              <TD>4.042e+002</TD>
              <TD></TD>
              <TD>4.404e+001</TD>
              <TD></TD>
              <TD>2.150e+002</TD>
            </TR>
          </TABLE>

【问题讨论】:

标签: html excel vba import-table


【解决方案1】:

照原样复制您的代码

<table> ... </table>

标签。

然后切换到 Excel,选择一个单元格并按 Command-v 或使用编辑 > 粘贴。 Excel 知道 HTML 表格,并且会正确地格式化表格。

【讨论】:

  • 感谢您的回答,但这不是我要找的。我没有一张桌子要复制。表格处于连续循环下,因此有 100 个表格。你的想法在这里不会很好。 PS:你的想法无论如何都行不通。
【解决方案2】:

没有 URL 就是猜测。

你可以得到所有的TABLE标签元素,比如使用Internet Explorer浏览器来抓取,

IE.document.getElementsByTagName("TABLE")

然后您按索引选择特定表;假设索引 0 即集合中的第一个表。

IE.document.getElementsByTagName("TABLE")(0)

如果您添加了引用(VBE > 工具 > 引用 > Microsoft Internet 控件和 HTML 对象库),您可以将此表放入 HTMLTable 对象变量中:

Dim nTable As HTMLTable
Set nTable = IE.document.getElementByTagName("TABLE")(0)

然后您可以在表格中选择tr标签,以获取表格行

nTable.getElementsByTagName("tr")

在每一行中,您可以通过td 标签或沿行长度循环其单元格:

nTable.getElementsByTagName("tr")(i).getElementsByTagName("td")

其中i 是上一步中行集合的循环的当前索引。

在循环表格单元格时,这是由td 标记获得的内部循环项,然后您可以访问它们的.innerText 属性以获取值。

外循环行中包含的内容示例(tr 标签):

表格单元格中各行(td 标记)的示例:

因此,当您对行进行外循环,然后对单元格进行内循环时,您将获得上图中显示的值。

完整完成此操作的示例,请记住根据每个网页,您必须稍微调整循环:https://stackoverflow.com/a/50888649/6241235

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多