Telegram机器人从Excel读取数据全攻略:用Python打造自动化信息推送

本文详细介绍如何创建Telegram机器人,并利用Python读取Excel数据,实现自动推送消息到Telegram的完整教程,包含代码示例与实用技巧,帮助您快速实现办公自动化。

阅读提示建议先浏览文章结构,再按需深入阅读具体段落。

在如今信息爆炸的时代,如何高效地将数据传递给需要的人?Telegram机器人以其灵活性和易用性,成为很多团队和个人的首选工具。如果您的手头数据存放在Excel表格里,并且希望定时或者按需推送到Telegram群组或好友,那么本文就是为您量身定制的指南。我们将从零开始,用Python编写一个简单的Telegram机器人,让它从Excel文件中读取数据并自动发送消息。准备好了吗?让我们一起动手实践。

一、准备工作:创建Telegram机器人与安装环境

在编写代码之前,我们需要完成两项关键准备:获取机器人的API Token,以及搭建Python开发环境。

  1. 创建Telegram机器人:打开Telegram,搜索BotFather,发送/newbot命令,按提示设置机器人名称和用户名,最后会得到一个以数字:字母格式呈现的API Token。请妥善保管这个Token,它是我们代码中用于认证的钥匙。
  2. 安装Python及依赖库:确保您的电脑已安装Python 3.7及以上版本。打开终端或命令提示符,执行以下命令安装所需库:pip install python-telegram-bot openpyxl pandas。其中python-telegram-bot用于与Telegram API交互,openpyxl用于读取Excel文件,pandas提供更灵活的数据处理能力(可选但推荐)。

二、编写读取Excel数据的Python脚本

我们需要一个函数来从Excel中提取数据。假设您的Excel文件名为data.xlsx,包含两列:时间事件,每行代表一条待推送的信息。下面是一个使用pandas读取的简单示例:

import pandas as pd

def read_excel_data(file_path: str) -> list:
    # 读取Excel所有数据
    df = pd.read_excel(file_path, sheet_name=0)
    # 将每一行转换为字典,存储为列表
    records = df.to_dict('records')
    return records

如果您的Excel结构更复杂,也可以使用openpyxl逐行读取。这个函数返回一个字典列表,每个字典对应一行,键为列名。这样我们就可以灵活地处理数据了。

三、在Telegram机器人中集成Excel数据

接下来,我们使用python-telegram-bot库创建机器人,并添加一个命令(例如/send)来触发数据发送。当用户(或您自己)向机器人发送/send时,机器人会读取Excel中的全部数据,并发送到当前聊天。

from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes

# 机器人TOKEN
TOKEN = 'YOUR_BOT_TOKEN'

def format_message(records: list) -> str:
    lines = []
    for rec in records:
        line = f"{rec['时间']} - {rec['事件']}"
        lines.append(line)
    return "\n".join(lines)

async def send_data(update: Update, context: ContextTypes.DEFAULT_TYPE):
    # 读取Excel数据
    records = read_excel_data('data.xlsx')
    if not records:
        await update.message.reply_text('Excel中没有数据。')
        return
    message = format_message(records)
    await update.message.reply_text(message)

def main():
    app = Application.builder().token(TOKEN).build()
    app.add_handler(CommandHandler('send', send_data))
    app.run_polling()

if __name__ == '__main__':
    main()

这里我们使用了异步函数处理命令,注意read_excel_dataformat_message需要在脚本中定义。当然,您可以根据实际需求修改发送的文案格式,例如加入Markdown或HTML的富文本效果。

四、定时自动推送:让机器人主动工作

如果您希望机器人每天定时(比如上午9点)自动推送Excel数据,而不需要手动触发,可以引入APScheduler库。安装:pip install apscheduler。在现有代码基础上,添加定时任务:

from apscheduler.schedulers.asyncio import AsyncIOScheduler
from telegram import Bot

async def job_function():
    bot = Bot(token=TOKEN)
    records = read_excel_data('data.xlsx')
    if records:
        message = format_message(records)
        # 替换为您的聊天的chat_id(可通过向机器人发消息后获取)
        await bot.send_message(chat_id='YOUR_CHAT_ID', text=message)

scheduler = AsyncIOScheduler()
scheduler.add_job(job_function, 'cron', hour=9, minute=0)
scheduler.start()

main()函数中启动调度器即可。这样机器人每天9点会准时从Excel读取数据并推送给指定聊天。

五、测试与部署:让机器人7×24小时在线

在本地运行脚本后,可以在Telegram中向机器人发送/send测试是否能正确返回数据。若一切正常,可以将其部署到云服务器(如阿里云、腾讯云、AWS等)或使用免费的Heroku、PythonAnywhere等平台,实现长期运行。部署时注意将data.xlsx文件放在同一目录下,并设置环境变量保存Token,避免硬编码泄露。

六、实用建议与注意事项

  • 路径问题:在代码中使用相对路径时,确保脚本的当前工作目录正确;更稳妥的方式是使用绝对路径。
  • 数据格式:如果Excel中有日期、浮点数等,pandas读取后会转换为相应类型,在格式化字符串时注意做好类型转换(例如用str())。
  • 错误处理:为避免文件不存在或格式错误导致程序崩溃,在读取代码中加入try...except,并向用户反馈错误信息。
  • 安全性:不要将Token发送到公开渠道,也不要提交到代码仓库中,建议使用环境变量或配置文件。
  • 性能优化:数据量很大时,可以只推送最新记录,或使用分页发送,避免单条消息过长被Telegram截断(限制为4096字符)。

总结

通过本文的实战,您已经掌握了一个从Excel到Telegram的自动化数据流转方案。无论您是用于日报推送、监控报警,还是团队协作,这个模式都能极大地提升工作效率。您可以根据需要扩展更多功能,比如支持动态Excel文件、筛选特定行等。Telegram机器人的能力远不止于此,希望本文能成为您探索自动化世界的起点。

FAQ

下载与安装

常见问题

机器人如何定期读取Excel文件?

可以使用APScheduler库在Python脚本中添加定时任务,例如每天上午9点执行一次读取并发送。具体代码见上文第四节。

支持哪些Excel文件格式?

使用pandas的read_excel函数,支持.xlsx、.xls等常见格式。如果是旧版.xls文件,确保安装了xlrd库(pip install xlrd)。

如何获取聊天ID让机器人发送到指定群组或个人?

向机器人发送任意消息后,通过Telegram API获取更新,可以在代码中使用context.bot.get_updates()查看chat.id。简单的方法是直接访问https://api.telegram.org/bot<你的token>/getUpdates,响应中会包含chat的id。