You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Telegram API实现Excel VBA接收消息?求技术建议

实现Telegram API与Excel VBA的消息接收方案

Absolutely doable! Connecting Telegram's API to Excel VBA to receive incoming messages is totally feasible—here's a practical, step-by-step breakdown to help you implement this:

第一步:Telegram端准备工作

  • 创建Telegram机器人:打开Telegram,搜索@BotFather,发送/newbot,按照提示设置机器人名称和用户名,完成后你会拿到一个API Token(格式类似123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11),务必妥善保存,不要泄露。
  • 获取目标聊天ID:给你的机器人发送一条测试消息,然后在浏览器中访问 https://api.telegram.org/bot<你的API Token>/getUpdates(替换<你的API Token>为实际值)。返回的JSON数据里,找到chat对象下的id字段,这就是你要接收消息的聊天ID(可能是负数,正常现象)。

第二步:Excel VBA端实现

准备依赖(可选但推荐)

为了方便解析Telegram API返回的JSON数据,推荐使用VBA-JSON模块:

  1. 打开Excel,按Alt+F11打开VBA编辑器;
  2. 右键点击你的工作簿,选择「插入」→「模块」;
  3. 搜索获取VBA-JSON的官方代码,复制粘贴到新建的模块中。

如果不想用第三方模块,也可以用ScriptControl对象来解析JSON(兼容性稍差,适合简单场景)。

核心代码示例

下面是一个完整的VBA脚本,用于从Telegram获取新消息并写入Excel:

Sub FetchTelegramMessages()
    Dim apiToken As String
    Dim targetChatId As String
    Dim lastUpdateId As Long
    Dim xmlHttp As Object
    Dim responseText As String
    Dim jsonResult As Object
    Dim updates As Variant
    Dim i As Integer
    
    ' 替换为你的机器人API Token和目标聊天ID
    apiToken = "YOUR_BOT_API_TOKEN"
    targetChatId = "YOUR_TARGET_CHAT_ID"
    
    ' 从A1单元格读取上次的更新ID(避免重复获取旧消息)
    lastUpdateId = IIf(IsEmpty(Sheet1.Range("A1")), 0, Sheet1.Range("A1").Value)
    
    ' 创建HTTP请求对象
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
    ' 调用Telegram的getUpdates接口,指定offset获取新消息
    xmlHttp.Open "GET", "https://api.telegram.org/bot" & apiToken & "/getUpdates?offset=" & lastUpdateId + 1, False
    xmlHttp.send
    
    If xmlHttp.Status = 200 Then
        responseText = xmlHttp.responseText
        ' 解析JSON(这里使用VBA-JSON的ParseJson函数)
        Set jsonResult = JsonConverter.ParseJson(responseText)
        
        If jsonResult("ok") Then
            Set updates = jsonResult("result")
            ' 遍历所有新消息更新
            For i = 1 To updates.Count
                Dim updateObj As Object
                Dim messageObj As Object
                Set updateObj = updates(i)
                Set messageObj = updateObj("message")
                
                ' 验证消息是否来自目标聊天
                If messageObj("chat")("id") = targetChatId Then
                    ' 找到Excel的下一行空白行
                    Dim nextEmptyRow As Integer
                    nextEmptyRow = Sheet1.Cells(Rows.Count, 2).End(xlUp).Row + 1
                    
                    ' 写入消息相关信息到Excel
                    Sheet1.Cells(nextEmptyRow, 2).Value = messageObj("from")("first_name") & " (" & messageObj("from")("id") & ")"
                    ' 将时间戳转换为Excel可识别的日期格式
                    Sheet1.Cells(nextEmptyRow, 3).Value = DateAdd("s", messageObj("date"), #1/1/1970#)
                    Sheet1.Cells(nextEmptyRow, 4).Value = messageObj("text")
                    
                    ' 更新最新的更新ID
                    lastUpdateId = updateObj("update_id")
                End If
            Next i
            
            ' 将最新的更新ID存回A1单元格
            Sheet1.Range("A1").Value = lastUpdateId
            MsgBox "成功获取 " & updates.Count & " 条新消息!"
        Else
            MsgBox "API请求失败:" & jsonResult("description")
        End If
    Else
        MsgBox "HTTP请求失败,状态码:" & xmlHttp.Status
    End If
    
    ' 释放对象
    Set xmlHttp = Nothing
    Set jsonResult = Nothing
End Sub

自动定时获取消息

如果需要自动定时拉取消息,可以添加定时器功能:

Sub StartAutoFetch()
    ' 设置每隔5分钟调用一次FetchTelegramMessages
    Application.OnTime Now + TimeValue("00:05:00"), "FetchTelegramMessages"
End Sub

Sub StopAutoFetch()
    ' 停止定时器
    On Error Resume Next
    Application.OnTime Now + TimeValue("00:05:00"), "FetchTelegramMessages", , False
    On Error GoTo 0
    MsgBox "自动获取已停止"
End Sub

关键注意事项

  • 宏安全设置:确保你的Excel文件保存为.xlsm格式,并且在「信任中心」中启用宏(否则代码无法运行)。
  • API频率限制:Telegram API对请求频率有约束,避免短时间内频繁调用getUpdates,建议间隔至少1-2秒,定时任务间隔不要小于1分钟。
  • 敏感信息保护:不要把API Token和聊天ID直接写在代码里,可以存在Excel的隐藏单元格或者加密的工作表中。
  • 扩展功能:如果需要接收图片、文件等非文本消息,需要修改代码处理message("photo")、message("document")等字段,并调用getFile接口下载对应资源。

内容的提问来源于stack exchange,提问作者PokerMaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:33:15