如何将当前时间与Excel中时间匹配,实现每日定时触发短信程序?
实现基于Excel时间触发的定时短信演示程序
看起来你已经搭好了短信演示的基础框架,现在要解决的核心问题就是每日自动匹配Excel里「Med Time 1」列的时间,触发对应的发送函数对吧?我给你梳理一套实用的实现方案,分步骤来:
1. 核心逻辑拆解
先把整个流程理清楚,避免走弯路:
- 读取Excel中的客户时间数据,重点处理好时间格式(别让字符串和datetime类型搞混)
- 实时抓取系统当前时间,只提取「时:分」部分(因为是每日重复触发,日期不用管)
- 匹配到对应时间后,调用你的短信演示函数
- 让程序持续运行,定期检查时间(比如每分钟查一次,既保证精准又不浪费资源)
2. 具体代码实现(以Python为例)
假设你用pandas处理Excel,datetime做时间判断,time控制循环间隔,先看完整示例:
首先安装需要的依赖(如果还没装):
pip install pandas openpyxl
然后是核心代码:
import pandas as pd from datetime import datetime import time # 你的短信演示函数(替换成你已有的逻辑就行) def send_first_med_reminder(customer_name): print(f"[演示模式] 向{customer_name}发送提醒:请按时服用第一剂药物!") def main(): # 读取Excel文件,替换成你的实际文件路径 df = pd.read_excel("customer_med_info.xlsx", engine="openpyxl") # 把「Med Time 1」列转换成标准时间格式(确保Excel里的时间是时分格式) df["Med Time 1"] = pd.to_datetime(df["Med Time 1"], format="%H:%M").dt.time print("定时提醒程序已启动,正在监控时间...") while True: # 获取当前时间,去掉秒和微秒,只留时分 current_time = datetime.now().time().replace(second=0, microsecond=0) # 筛选出当前时间匹配「Med Time 1」的客户 matched_customers = df[df["Med Time 1"] == current_time] # 给每个匹配的客户触发演示函数 for _, customer_row in matched_customers.iterrows(): send_first_med_reminder(customer_row["客户姓名"]) # 每分钟检查一次,可根据需求调整间隔(比如30秒就写30) time.sleep(60) if __name__ == "__main__": main()
3. 关键注意事项
- 时间格式要统一:Excel里的「Med Time 1」列一定要设成纯时间格式(只显示时分),别带日期;如果是文本格式,记得在
pd.to_datetime里指定正确的格式(比如带秒就用%H:%M:%S) - 避免重复触发:上面的代码每分钟检查一次,同一分钟内只会执行一次,但如果担心极端情况(比如程序卡了一下重复执行),可以加个变量记录上一次触发的时间,对比后再执行
- 长期运行的小技巧:如果要让程序一直后台跑,Windows可以用「任务计划程序」设置开机启动,Linux可以用
systemd做服务,或者用nohup python your_script.py &后台启动 - 测试小妙招:测试的时候可以手动把
current_time改成Excel里的某个时间,比如current_time = datetime.strptime("09:30", "%H:%M").time(),直接验证函数会不会触发
4. 扩展优化建议
- 如果需要支持多时间触发(比如「Med Time 2」「Med Time 3」),只需要复制对应的匹配逻辑和函数调用部分就行
- 加个日志功能,把每次触发的时间、客户信息写入日志文件,方便后续排查问题
- 如果Excel会实时更新,可以每次循环都重新读取文件,或者用文件监听工具(比如
watchdog),当Excel修改后再重新加载数据
内容的提问来源于stack exchange,提问作者Elizabeth Bird Rock
相关产品推荐
相关产品推荐

