Excel VBA 使用 Telegram bot api 发送图像

2024-01-01

我正在编写一个 Excel 宏,该宏在运行另一个宏后发送结果的屏幕截图 。 截取的屏幕截图以 jpg 图像形式保存在目录 C:\documents\SCREENSHOT 中。 我想使用机器人将 picture1.jpg“C:\documents\SCREENSHOT\picture1.jpg”发送到电报组。

我可以使用以下代码轻松发送短信。

Private Sub telegram_pruebas() 'Solicita un mensaje esta función del mensaje y el ID del chat

    Dim objRequest As Object 'Con lo que se crea la solicitud de internet
    Dim datos_posteo As String 'Lo que enviará por mensaje
    
    Dim token, ChatID, mensaje As String

    token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ChatID = -xxxxxxxxxxxx
    mensaje = "xxxxxxxx"
    
    datos_posteo = "chat_id=" & ChatID & "&text=" & mensaje 'Se 'Se le muestra al robot que enviar y a que chat
    
    
    Set objRequest = CreateObject("MSXML2.XMLHTTP") 'Crea un request como archivo XHLM
    
    With objRequest
        .Open "POST", "https://api.telegram.org/bot" & token & "/sendMessage?", False 'Aqui esta la dirección del sitio web con el api del robot
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 'No se que sea
        .send (datos_posteo) 'La indicación de enviar el texto al chat
    End With
    
End Sub

问题是我找不到发送存储在我的计算机中的图像的方法,我看到了文档,它说有必要使用多部分/表单数据方法,但我不知道如何改变我的子 telegram_pruebas()要使用该方法,我已经看到了溢出堆栈和其他页面中的所有示例,并且我尝试了这样的一些

Private Sub telegram_pruebas_photo() 'Solicita un mensaje esta función del mensaje y el ID del chat

    Dim objRequest As Object 'Con lo que se crea la solicitud de internet
    Dim datos_posteo As String 'Lo que enviará por mensaje
    
    Dim token, ChatID, photo As String
    
    token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ChatID = -xxxxxxxxxxx
    photo = "C:\documents\SCREENSHOT\picture1.jpg"
    
    datos_posteo = "chat_id=" & ChatID & "&photo=" & photo 'Se 'Se le muestra al robot que enviar y a que chat
    
    
    Set objRequest = CreateObject("MSXML2.XMLHTTP") 'Crea un request como archivo XHLM
    
    With objRequest
        .Open "POST", "https://api.telegram.org/bot" & token & "/sendPhoto?", False 'Aqui esta la dirección del sitio web con el api del robot
        .setRequestHeader "Content-Type", "multipart/form-data" 'No se que sea
        .send (datos_posteo) 'La indicación de enviar el texto al chat
        response = .responseText
    End With
    MsgBox response
End Sub


这不起作用,我得到一个空的回复。

有人可以修改我的代码来解决问题,或者至少帮助我理解我的错误..

我尝试过这个页面来尝试理解:

如何使用 Excel VBA 将桌面照片发送到 telegram https://stackoverflow.com/questions/61904082/how-to-send-a-desktop-photo-to-telegram-using-excel-vba 使用VBA将本地存储照片发送到Telegram https://stackoverflow.com/questions/67412694/sending-local-storage-photo-into-telegram-with-vba

在电报机器人上发送本地托管的照片 https://stackoverflow.com/questions/53765822/sending-locally-hosted-photo-on-telegram-bot

将照片发送到 Telegram(API / Bot) https://stackoverflow.com/questions/50655555/sending-photo-to-telegram-api-bot

还有很多其他人。

Thanks


Try

Sub telegram_pruebas_photo()

    Const URL = "https://api.telegram.org/bot"
    Const TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    Const METHOD_NAME = "/sendPhoto?"
    Const CHAT_ID = "-xxxxxxxxxxx"
    
    Const FOLDER = "C:\documents\SCREENSHOT\"
    Const JPG_FILE = "picture1.jpg"
    
    Dim data As Object, key
    Set data = CreateObject("Scripting.Dictionary")
    data.Add "chat_id", CHAT_ID
    
    ' generate boundary
    Dim BOUNDARY, s As String, n As Integer
    For n = 1 To 16: s = s & Chr(65 + Int(Rnd * 25)): Next
    BOUNDARY = s & CDbl(Now)

    Dim part As String, ado As Object
    For Each key In data.keys
        part = part & "--" & BOUNDARY & vbCrLf
        part = part & "Content-Disposition: form-data; name=""" & key & """" & vbCrLf & vbCrLf
        part = part & data(key) & vbCrLf
    Next
    ' filename
    part = part & "--" & BOUNDARY & vbCrLf
    part = part & "Content-Disposition: form-data; name=""photo""; filename=""" & JPG_FILE & """" & vbCrLf & vbCrLf
    
    ' read jpg file as binary
    Dim jpg
    Set ado = CreateObject("ADODB.Stream")
    ado.Type = 1 'binary
    ado.Open
    ado.LoadFromFile FOLDER & JPG_FILE
    ado.Position = 0
    jpg = ado.read
    ado.Close

    ' combine part, jpg , end
    ado.Open
    ado.Position = 0
    ado.Type = 1 ' binary
    ado.Write ToBytes(part)
    ado.Write jpg
    ado.Write ToBytes(vbCrLf & "--" & BOUNDARY & "--")
    ado.Position = 0

    Dim req As Object, reqURL As String
    Set req = CreateObject("MSXML2.XMLHTTP")
    reqURL = URL & TOKEN & METHOD_NAME
    With req
        .Open "POST", reqURL, False
        .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & BOUNDARY
        .send ado.read
        MsgBox .responseText
    End With

End Sub

Function ToBytes(str As String) As Variant

    Dim ado As Object
    Set ado = CreateObject("ADODB.Stream")
    ado.Open
    ado.Type = 2 ' text
    ado.Charset = "_autodetect"
    ado.WriteText str
    ado.Position = 0
    ado.Type = 1
    ToBytes = ado.read
    ado.Close

End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel VBA 使用 Telegram bot api 发送图像 的相关文章

  • OpenFileDialog 无法加载 CSV 文件,但可以加载 xls/xlsx Excel 文件 [重复]

    这个问题在这里已经有答案了 在我的 Windows 窗体应用程序中加载 Excel 文件时 我可以加载 xls and xlsx格式很好 但是当我选择一个 CSV我收到以下错误 System NullReferenceException 未
  • 使用换行符将值导出到 Excel 中的单个单元格中。 jQuery 数据表

    我使用 jQuery DataTables 成功将 HTML 表格从 Web 应用程序导出到 Excel 然而 某一特定列的值包含换行符和制表符 我成功地通过用以下内容替换新行 n 和制表符 t 在 HTML 表格上正确显示数据 br 和
  • VBA 中类初始化时的参数

    是否可以在初始化时向类传递参数 就像 Java 等面向对象语言中所做的那样 您可以在其中创建参数化构造函数 事件Class Initialize 不允许我输入参数 我怎么解决这个问题 不幸的是 您不能使用参数化构造函数 最接近的替代方案是工
  • 升级到 Office 365 专业增强版后 Excel VBA 运行速度极慢

    我粘贴部分代码如下 这段代码是解析从HTTP请求得到的JSON字符串 根本没有工作表 工作簿操作 在office升级到office365专业增强版之前 效率还是蛮高的 但升级后 解析一个不到2秒的json 却要花费几分钟 我个人不明白根本原
  • 如何将 Excel PivotCache 提取到 Pandas 数据框中?

    第一次在这里发帖 如果以前有人问过这个问题 我深表歉意 我找不到任何适用的内容 有没有办法将 Excel 数据透视表中的基础数据读取到 Pandas 数据框中 几年来 我一直使用 Excel Auto Open 宏来下载多个 Excel 文
  • 使用 win32com 访问 Excel 文件的问题

    每个人 我一直在 Python 中使用 win32com client 模块来访问包含 VBA 宏的 Excel 文件的单元格 代码中的一个声明 xl win32com client gencache EnsureDispatch Exce
  • 在 Excel 中将 x 轴的最大值和最小值设置为日期

    我有一个 X 轴上有日期的图表 我正在尝试使用 Excel VBA 设置该轴的最大值和最小值 下面是我的代码 似乎不起作用 有人可以帮忙吗 With ActiveSheet ChartObjects 1 Chart Axes xlValue
  • Access 2007 数据库和应用程序的版本控制

    我需要对 Microsoft Access 2007 数据库和应用程序进行版本控制 目前 所有内容都包含在单个 mdb 文件中 该应用程序包括 Forms VBA code 实际数据库 我假设我需要将数据库与表单 代码分开 我希望能够将表单
  • 根据单元格值隐藏图表

    我是 Excel VBA 新手 我正在尝试用 VBA 代码解决这个问题 基本上 我的工作表有 12 个图表和 12 个表格 在任何给定时间 只有一个表会获取数据 并且只能看到该图 其他 11 个图表应隐藏 我试过这个 Sub getchar
  • 在 Git 上保存 Excel 文件的版本,以便稍后手动协调差异

    我将用一个月的时间更新Excel文件 这些文件的语言不是英语 我想我也可以使用 Git 来管理我想做的事情 情况 初始提交 我有一个用其他语言编写的 Excel 文件 我必须执行一些工作并用其中的数据填充 Excel 文件 My plan
  • 如何在 Excel 中使用 VBA 删除“*”或“-”字符后面的文本?

    我编写了以下代码 使用 Excel 中的 VBA 删除某一行中 或 字符后面的文本 但出现错误 Sub Removetext For Each c In Range A1 ZZ1 c Value Left c Value InStr c V
  • Excel 区分大小写的 COUNTIF 带通配符:本机函数?

    我正在尝试找到一个本机 Excel 函数 或其组合 该函数将以 COUNTIF 的方式精确运行 即处理通配符 但区分大小写 我已经成功使用了 SUMPRODUCT EXACT 函数 它们确实执行区分大小写的计数 但问题是我无法让它们识别通配
  • Outlook 宏中的 SenderName 为空

    我想要得到SenderName和和To属性来自于MailItem对象 但它们是空白的 我可以看到有SentOn Subject以及其他不为空的属性 有谁知道为什么这两个是空白的 这是我的代码 Sub TestMacro Dim myOlAp
  • 范围联合无序

    我正在尝试按特定顺序复制各种范围 然后将它们从工作簿粘贴到不同的工作簿中 现在 我已经设置了范围 例如 Set rg ws1 Range A2 A i Offset rowOffset 1 columnOffset 0 Set rg1 ws
  • 给定 A 列中的值,在 EXCEL 中查找 B 列中的最小值/最大值

    我有一列公交车站 ID 号 A 列 B 列是不同的时间 其中每个值都是一个人上 下车的时间 为了知道公交车停了多长时间 我想在给定 A 的某个值的情况下找到 B 列中的最大值 最小值之间的差异 84009 9 17 38 AM 84009
  • 使用用户定义函数的 VBA 数据验证

    我有一个用户定义的函数 我想在自定义数据验证中使用它 我的函数工作正常 但是当我在数据验证中使用它时 每次都会出错 有代码 Public Function AlphaNumeric pValue As Boolean Dim LPos As
  • Windows 更新后 Excel 2010 ActiveX 控件不再工作 [重复]

    这个问题在这里已经有答案了 因此 在工作中 我在安装了最新的 Windows 7 更新 包括 Microsoft Office 2010 更新 后遇到了这个问题 更新的日期是今天 2014 年 12 月 12 日 更新后 我在 Excel
  • Excel VBA 更改命令按钮的颜色

    我在更改颜色时遇到问题CommandButton 在电子表格中 我添加设计按钮作为表单或 ActiveX 然后在 VBA 中我尝试 Activesheet shapes CommandButton1 visible false 这个效果很好
  • VBA 使用 Like 运算符删除行

    简单的事情并不简单 我试图根据具有以 2L 开头的数据的特定列删除行 所以我写了这段代码 LastRow可以理解 Sub Cleanup For i 1 To LastRow If Range F i Like 2L Then Rows i
  • 使用@@Identity

    我想知道如何从另一个数据库的表中获取最近生成的自动编号值 目前我正在这样做 Do Until rsA EOF Inserts new row here works Set rs New ADODB Recordset rs Open SEL

随机推荐

  • 左侧的 HTML 元素滚动条[重复]

    这个问题在这里已经有答案了 可能的重复 DIV 左侧垂直滚动条 https stackoverflow com questions 1455708 div vertical scroll bar on left 有没有办法使用 css 或
  • 特定数据符合时间序列的标准是什么?

    我想做的是尝试检测天气数据集是否是时间序列 我想自动化这个过程 假设我有以下数据集 df1 Heading 1 Heading 2 Heading 1 Heading 2 1 1 2023 34 12 34 2 1 2023 42 99 4
  • Python urllib3:一段时间后关闭空闲连接

    有没有办法告诉Python urllib3在一段时间后不要重用空闲连接 而是关闭它们 寻找https urllib3 readthedocs io en latest reference index html module urllib3
  • 对于制服和顶点属性来说,OpenGL 索引和位置是一样的吗?

    在 OpenGL 参考页中 some https www opengl org sdk docs man4 html glUniform xhtml函数被标记为使用统一位置 而other https www opengl org sdk d
  • Vue - 多个无线电输入,检查值?

    我在创建一个简单的民意调查生成器时学习 vue 但我在无线电输入方面遇到了问题 问题可以有两种类型之一 选择或范围 两者都是无线电输入 选择 是无线电输入单选问题 范围 是具有 1 5 个值的无线电输入问题 如下图所示 稍后我必须修复命名
  • 在“for”循环java中重新启动当前迭代

    我有一个 for 循环 要求用户输入一个数字 然后对其执行 10 次操作 我想要一个内置的检查 如果用户输入不接受的输入 循环应该重新启动当前的迭代 例如 如果用户在第 3 轮中输入错误 则应重新启动第 3 轮 我怎么做 java中有类似R
  • Unicode 数字的字符类

    我需要创建一个Pattern它将匹配所有 Unicode 数字和字母字符 到目前为止我已经 p IsAlphabetic 0 9 第一部分对我来说效果很好 它很好地将非拉丁字符识别为字母字符 问题出在后半段 显然它只适用于阿拉伯数字 字符类
  • Angular 2:模板解析错误:无法绑定到“ngModel”,因为它不是“输入”的已知属性

    当我使用双向绑定 ngModel 时收到此消息 Template parse errors Can t bind to ngModel since it isn t a known property of input 我知道导入 Forms
  • 免费 API 或类似工具可获取股票的下一个收益日期 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 API 或类似的 API 我可以在其中获取股票的下一个 即将到来的 收益日期 我已经用
  • 在播放视频/流时选择 ROI

    如果有人可以帮助我在视频流播放时选择 ROI 我不希望它暂停或捕获第一帧 我将不胜感激 我错过了什么吗 我尝试将框架设置为相同的名称 cv2 selectROI Frame frame False cv2 imshow Frame fram
  • 如何使用UISearchBar搜索MKMapView?

    我有一个应用程序需要具有类似的搜索功能 例如 Apple 地图 应用程序 iPhone iPod Touch 和 iPad 附带 有问题的功能应该不是一件难事 但我真的不知道如何在搜索栏中输入街道地址 然后获取该地址的坐标或可以帮助我实际移
  • 单击按钮刷新页面

    我想在单击按钮时刷新当前页面 使用 JavaScript 我有以下内容
  • 复制和移动习语?

    通过使用复制和交换 https stackoverflow com questions 3279543 what is the copy and swap idiom rq 1我们可以轻松地实现具有强大异常安全性的复制赋值 T operat
  • 为什么使用 Django 的collectstatic 而不是直接从静态目录提供文件?

    来自 Django 文档 部署 django contrib staticfiles 提供了方便 用于在单个目录中收集静态文件的管理命令 您可以轻松地为他们服务 将 STATIC ROOT 设置为您想要的目录 提供这些文件 例如 STATI
  • GWT RequestFactory 不持久保存附加实体

    我正在努力掌握新的窍门请求工厂 http code google com webtoolkit doc latest DevGuideRequestFactory htmlAPI 经历了一段非常艰难的时期 我的域模型包括Staffer a
  • 为什么这里不显示表的列名?

    我的跷跷板有问题 当我尝试组成并显示一个简单的表格时 它显示没有列名称 我做了什么 首先 我必须说我正在使用 seesaw 1 4 2 Then Clojure 1 4 0 require seesaw core as ss ss nati
  • JavaScript 中的 HTTP GET 请求?

    我需要做一个HTTP GET http en wikipedia org wiki Hypertext Transfer Protocol Request methodsJavaScript 中的请求 最好的方法是什么 我需要在 Mac O
  • 忽略 DurandalJS 应用程序中的锚点

    我有一个使用 DurandalJS 的 SPA 应用程序 效果很好 链接被路由 视图模型被激活等 问题是 我有一个锚点指向实际存在于服务器上的页面 我需要浏览器来实际查询此页面 这是一个 asp net MVC 页面 看起来 Duranda
  • 在 Collectors.groupingBy() 中映射值

    为了这个例子 我们假设我有一个简单的类型Tuple有两个属性 interface Tuple
  • Excel VBA 使用 Telegram bot api 发送图像

    我正在编写一个 Excel 宏 该宏在运行另一个宏后发送结果的屏幕截图 截取的屏幕截图以 jpg 图像形式保存在目录 C documents SCREENSHOT 中 我想使用机器人将 picture1 jpg C documents SC