【问题标题】:Increase speed of IE table import提高 IE 表导入速度
【发布时间】:2018-05-01 11:46:55
【问题描述】:

我有这段代码可以从已打开的 Internet Explorer 文档中提取数据。问题是,表格很大(30x5000),使用 For 循环将所有数据移动到工作表中需要超过 1 分钟。如果可能的话,我希望更快地传输数据。是否可以将整个页面复制/粘贴到工作表中?还有其他解决方案吗?

 Set doc = ie.Document
 Set hTable = doc.GetElementsByTagName("table")

 For Each tb In hTable

    Set hBody = tb.GetElementsByTagName("tbody")
    For Each bb In hBody

        Set hTR = bb.GetElementsByTagName("tr")
        For Each tr In hTR

             Set hTD = tr.GetElementsByTagName("td")
             y = 1 ' Resets back to column A
             For Each td In hTD
               ws.Cells(z, y).Value = td.innertext
               y = y + 1
             Next td
             DoEvents
             z = z + 1
        Next tr
        Exit For
    Next bb
Exit For
Next tb

【问题讨论】:

  • 欢迎来到本站!查看tourhow-to-ask page 了解更多关于提出问题以吸引高质量答案的信息。您可以edit your question 包含更多信息。如果您的问题被转移到Code Review,请不要感到惊讶——通常需要改进的工作代码在那里得到更好的处理。至于这一点,您也许可以使用 XSLT 呈现表格的 CSV,然后导入该文件。
  • 将所有数据写入数组,然后写入 Excel 工作表一次。
  • 1) 是否有 url 可以分享 2) 如果此代码按原样工作,那么如上所述,可能更适合作为优化问题进行代码审查的候选者?

标签: excel vba performance loops


【解决方案1】:

循环本身就很慢。您可以尝试使用宏记录器导入整个表。我不确定那会更快。您没有提供 URL,因此无法测试此概念。如果您无法使用 Excel 加快速度,请考虑使用 R 或 Python 执行相同的操作。我亲身经历了大约 10,000 倍的改进,甚至在使用 R 或 Python 而不是 Excel 的几个流程中改进了 100,000 倍。

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多