【问题标题】:Excel getting data from a web form?Excel 从 Web 表单中获取数据?
【发布时间】:2011-09-10 05:21:15
【问题描述】:

我提前道歉,因为我在表达这个问题时遇到了问题。

我们需要在 Excel 中有一个对话框,可以根据来自我们服务器的数据动态更改。

如何让 Excel 显示从 HTML 生成的表单(应直接从网络服务器检索),然后将该表单提交的结果转换为我可以操作的 VBA 字符串?

(假设用户有稳定可靠的互联网连接,并且我们的服务器永远不会关闭。)

有没有办法让 Excel 打开一个浏览器窗口,我可以像这样拦截它的行为?还是我必须使用 Ajax 并自己解析 HTML 以使用 VBA 创建表单?

我希望这个问题甚至有意义! 谢谢!

【问题讨论】:

  • 你在服务器上运行什么?它必须是 HTML 页面吗?直接连接到数据库(如 mySQL)可能更方便 - 不过我不知道 Excel 处理这些问题的能力如何
  • 为什么不直接使用 Excel 的功能从网页中检索数据(对于 2007/2010;功能区上的“数据”选项卡,“来自 Web”选项)?
  • 这是一个更大的宏编写项目的一部分,我无法控制来自服务器的内容。它是 HTML,尽管我可能能够说服他们给我 XML。

标签: html excel forms vba


【解决方案1】:

使用 Internet Explorer ActiveX 控件。这是 Excel VBA 的完整教程:

http://vba-corner.livejournal.com/4623.html

【讨论】:

    【解决方案2】:

    您可以使用 XMLHttp 的实例从网络服务器请求和接收信息。如果您正在访问的“网络服务”在您的控制之下,那么如果您需要更结构化的数据集,最好将数据返回为 csv/纯文本或 XML。

    如果您需要在请求中传递一些信息,那么您可以使用 GET 或 POST(取决于您需要发送多少)。这将模仿常规网页表单的发布。

    这是一个简单的函数,它将从传递给它的 URL 中获取信息:

    Private Function WebResponse(sURL As String) As String
    
        Dim XmlHttpRequest As Object
        Set XmlHttpRequest = CreateObject("MSXML2.XMLHTTP")
        XmlHttpRequest.Open "GET", sURL, False
        XmlHttpRequest.send
        WebResponse = XmlHttpRequest.responseText
    
    End Function
    

    您的网址可以是:http://yourserver/page.php?id=22

    其中“22”是您传递给请求的信息,以确定服务器要回复的信息。

    【讨论】:

    • 我知道 AJAX,但诀窍是我需要从 Web 服务器获取 HTML 表单并将其 显示 给用户,允许他们提交表单并然后从提交的表单中获取输出来操作它。
    • MSXML2.ServerXMLHTTP 在这种情况下更适合与服务器交互。 @Josh - 你可以生成一个 IE 实例,但它又慢又脏。或者使用 MSXML2.ServerXMLHTTP 并将响应文本加载到 HTML 文档中,例如 Set HTMLDoc = New HTMLDocument 然后 HTMLDoc.body.innerHTML = XMLHTTP.responseText 并显示文档。 This may also help
    • @osknows - 从最初的问题中并不清楚 HTML 输入表单是否是必需的,或者它们是否只是在现有页面上的捎带。我猜他们可以在没有它的情况下进行管理,这样做的好处是不必从 HTML 中解析出数据。我认为 ServerXMLHTTP 已针对在服务器而不是客户端 (support.microsoft.com/kb/290761) 上的使用进行了优化。
    【解决方案3】:

    如果你有 Excel 2010,你可以试试Data->From Web 功能,这是一个很酷的功能。我相信你可以将它与 VBA 集成

    【讨论】:

    • Intriguing.. 我想知道是否有办法让它向用户显示一个表单,而不会到处都是丑陋的箭头(至少丑陋的箭头出现在 Excel 2003 等效项中) , 并允许粘贴 POST 数据。我会调查这个选项。
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 2019-03-30
    相关资源
    最近更新 更多