在Excel中刷新股票数据

基本功能

点击刷新按钮以后,读取excel中某一列保存的股票代码,然后通过股票数据API获取实时数据,并保存到excel中。

如下图,点击刷新按钮,读取D列的股票代码,获取实时数据,并将对应的数据写入到E - L列。
效果图

基本步骤

step-1 添加按钮

通过Developer -> Insert -> Button添加刷新按钮。

add-button

然后分配宏脚本,这里新定义一个RefreshBtnClicked()。

Option Explicit

Sub RefreshBtnClicked()
    '
    Debug.Print "Start Refresh..."
End Sub

step-2 定义股票数据结构类

定义CStock类(class),主要目的是方便数据的结构化处理和存储。可以根据需要和使用的股票API接口返回的数据添加、删除对应字段。
add-CStock-class

Option Explicit

Public code As String '股票代码
Public name As String '股票名称
Public lastClosePrice As Double '昨收
Public openPrice As Double '今开
Public currPrice As Double '最新价格
Public maxPrice As Double '最高
Public minPrice As Double '最低

Public volume As Double '
Public turnover As Double
Public lastUpdateDate As String
Public lastUpdateTime As String

' Get current increase (%) - 获取今日涨幅
Public Property Get increaseRate() As Double
    increaseRate = Round((currPrice - lastClosePrice) / lastClosePrice * 100, 2)
End Property

step-3 检查股票代码

接下来为了排除非法股票代码,通过代码首两个字母做一个简单的筛选,比如沪市(sh开头)、深市(sz开头)和港股(hk开头)。

Public Enum STOCK_MKT
    MKT_HK
    MKT_SH
    MKT_SZ
    MKT_INVALID
End Enum

'Get Market type by stock code.
Function GetMarketType(stockCode As String) As STOCK_MKT
    Dim code As String
    code = LCase(stockCode)
    
    GetMarketType = MKT_INVALID
    
    If InStr(code, "hk") = 1 Then
        GetMarketType = MKT_HK
        GoTo Done
    End If
  
<think>嗯,用户问的是WPS宏能不能请求网页获取数据。之前已经回答过关于WPS宏如何请求接口的问题,现在用户可能是在确认是否真的可以做到,或者想知道更基础的信息。 首先,我需要确认用户的背景。可能用户不太熟悉VBA或者宏的功能,所以需要先明确回答“能”,然后再详细说明方法。之前的回答已经详细介绍了使用XMLHTTP对象进行GET和POST请求,所以这次可能需要简化步骤,但也要确保覆盖用户可能的疑问。 用户可能想知道是否需要额外的设置,比如引用库或者权限问题。之前的回答提到了引用Microsoft XML库,但用户可能在使用过程中遇到问题,比如找不到该引用,或者在WPS中是否有不同。需要注意WPS和Microsoft Office在VBA支持上的差异,可能存在兼容性问题,需要提醒用户。 另外,用户可能关心实际操作步骤,比如如何启用开发工具,如何编写宏。需要分步骤说明,确保清晰易懂。同时,示例代码的展示很重要,用户可能需要直接复制代码进行测试,所以代码的正确性和可运行性必须保证。 还应该提到常见问题,比如跨域问题、HTTPS证书错误、异步处理等。用户可能在实践中遇到这些问题,提前给出解决方法能提升回答的实用性。此外,数据解析部分可能需要更详细的说明,比如如何处理JSON或XML响应,可能需要使用脚本控件或其他方法。 另外,用户可能担心安全性,比如请求外部接口是否存在风险,或者是否需要权限设置。需要简要提及安全注意事项,但可能不需要深入,除非用户特别问到。 最后,总结部分需要强调WPS宏确实可以实现网页数据请求,并提醒参考之前的详细步骤,同时欢迎进一步提问。这样既确认了可行性,又引导用户查阅更详细的内容,避免重复。</think>WPS宏**确实可以通过请求网页接口获取数据**,主要基于VBA语言实现网络通信功能。以下是核心实现原理和具体操作说明: --- ### **一、实现基础** 1. **核心组件**:使用`MSXML2.XMLHTTP`或`WinHttp.WinHttpRequest`对象(Windows系统内置组件) 2. **数据交互协议**:支持HTTP/HTTPS协议的GET/POST/PUT/DELETE等请求方法 3. **数据格式**:可处理JSON、XML、HTML或纯文本等响应内容 --- ### **二、基础操作步骤** #### **步骤1:启用开发工具** - WPS菜单栏 → 文件 → 选项 → 自定义功能区 → 勾选「开发工具」 #### **步骤2:创建新宏** 1. 开发工具 → 宏 → 输入宏名称 → 创建 2. 在VBA编辑器中编写代码 --- ### **三、代码示例** #### **1. 基础GET请求** ```vba Sub GetWebData() Dim http As Object Set http = CreateObject("MSXML2.XMLHTTP") ' 创建请求对象 Dim url As String url = "https://api.example.com/data?param=value" ' 目标接口地址 With http .Open "GET", url, False ' 同步请求模式 .setRequestHeader "Content-Type", "application/json" .send If .Status = 200 Then ' 处理响应数据 Dim response As String response = .responseText MsgBox "获取数据成功:" & response Else MsgBox "请求失败,状态码:" & .Status End If End With End Sub ``` #### **2. 带参数的POST请求** ```vba Sub PostWebData() Dim http As Object Set http = CreateObject("MSXML2.XMLHTTP") Dim url As String url = "https://api.example.com/submit" Dim postData As String postData = "{""username"":""test"", ""password"":""123456""}" ' JSON格式数据 With http .Open "POST", url, False .setRequestHeader "Content-Type", "application/json" .send postData ' 发送请求体 If .Status = 200 Then MsgBox "响应内容:" & .responseText Else MsgBox "错误:" & .Status & " - " & .statusText End If End With End Sub ``` --- ### **四、关键技术点** #### **1. 异步请求模式** ```vba .Open "GET", url, True ' 第三个参数设为True http.onreadystatechange = "CallbackFunction" ' 需自定义回调函数 ``` #### **2. 超时控制** ```vba http.setTimeouts 5000, 5000, 5000, 5000 ' 连接/发送/接收/解析超时(单位:毫秒) ``` #### **3. HTTPS证书验证跳过** ```vba http.setOption 2, 13056 ' 绕过SSL证书验证(仅限测试环境使用) ``` --- ### **五、数据解析方法** #### **1. JSON解析** ```vba ' 使用ScriptControl解析JSON Dim sc As Object Set sc = CreateObject("MSScriptControl.ScriptControl") sc.Language = "JScript" Dim json As Object Set json = sc.Eval("(" + responseText + ")") MsgBox json.data.items(0).name ``` #### **2. XML解析** ```vba Dim xmlDoc As Object Set xmlDoc = CreateObject("Microsoft.XMLDOM") xmlDoc.loadXML(responseText) MsgBox xmlDoc.SelectSingleNode("//item/name").Text ``` --- ### **六、常见问题处理** | 问题现象 | 解决方案 | |-----------------------|----------------------------------| | 429 Too Many Requests | 添加延时:`Application.Wait Now + TimeValue("0:00:02")` | | 跨域请求被拒绝 | 添加请求头:`.setRequestHeader "Access-Control-Allow-Origin", "*"` | | 中文乱码 | 设置编码:`.setRequestHeader "Charset", "UTF-8"` | --- ### **七、应用场景** 1. 从公开API获取实时数据(如天气、股票行情) 2. 与企业内部系统进行数据交互 3. 自动化填写网页表单数据 4. 抓取公开网页信息(需遵守robots协议) --- ### **注意事项** 1. 部分接口需要**API密钥认证**,需在请求头添加: $$.setRequestHeader "Authorization", "Bearer your_token"$$ 2. 生产环境建议使用`WinHttp.WinHttpRequest`对象(更稳定) 3. 频繁请求可能导致IP被封禁,需合理设置请求间隔 如需更详细的代码示例,可以参考我之前提供的请求接口实现方案。具体实现需根据目标接口的API文档调整参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值