如何实现pandas DataFrame定时读取Excel,仅V列值变化时打印数据
Excel固定间隔轮询检测V列变化触发打印实现方案
实现逻辑
- 首次运行先读取目标范围数据,存储V列的初始值作为对比基准
- 通过无限循环+固定时长休眠实现定时轮询
- 每轮读取数据后单独提取V列,和上一轮存储的V列值做全量对比
- 仅当V列存在数值差异时,才打印当前读取到的全量数据,同时更新对比基准值
- 增加基础异常捕获,避免文件被占用、读取失败时程序直接崩溃
完整可运行代码
import pandas as pd import time # 可根据实际需求调整配置 FILE_PATH = 'Live_Data.xlsm' SHEET = 'Sheet1' POLL_INTERVAL = 3 # 轮询间隔,单位:秒 SKIP_ROW_COUNT = 5 READ_ROW_COUNT = 21 READ_COL_RANGE = 'B:V' last_v_data = None while True: try: # 读取指定范围的Excel数据,xlsm格式需指定openpyxl引擎 current_df = pd.read_excel( FILE_PATH, sheet_name=SHEET, skiprows=SKIP_ROW_COUNT, nrows=READ_ROW_COUNT, usecols=READ_COL_RANGE, engine='openpyxl' ) current_v_data = current_df['V'] # 首次运行初始化基准值 if last_v_data is None: last_v_data = current_v_data.copy() print("初始基准数据加载完成,开始轮询检测V列变化") else: # 检测V列是否发生变化 if not current_v_data.equals(last_v_data): print("\n检测到V列数值更新,当前数据:") print(current_df) last_v_data = current_v_data.copy() except Exception as e: print(f"当前轮次读取失败:{str(e)},将在下个间隔重试") # 等待指定间隔后进入下一轮检测 time.sleep(POLL_INTERVAL)
使用注意事项
- 运行前先安装依赖库,执行命令:
pip install pandas openpyxl - 轮询间隔不建议设置小于1秒,频繁读写文件会占用不必要的系统资源
- 对比逻辑采用pandas的
equals方法,可精准识别V列任意单元格的数值变动,不会出现漏判 - 如果Excel正处于打开编辑的锁定状态,程序会自动跳过当前轮次,不会直接退出
内容的提问来源于stack exchange,提问作者jyotirmay
相关产品推荐
相关产品推荐

