如何使用pygsheets按日期筛选删除Google表格指定数据行
pygsheets按日期删除行实现方案
pygsheets本身就支持这个操作,实现起来很简单,唯一要注意的核心坑点是删除行必须从表格底部往顶部倒序操作——如果从上往下删,删除上方行后剩余行会自动上移,行号会整体错位,很容易出现漏删、错删的问题。
可直接复用的通用代码
下面封装的方法支持传入任意自定义日期,自动匹配删除对应行:
import pygsheets def delete_sheet_rows_by_date( target_date: str, sheet_file, ws_name: str = "Sheet1", date_col: int = 1 ): """ 按指定日期删除Google Sheet中匹配的数据行 :param target_date: 要删除的目标日期,和表格内存储的格式保持一致即可,比如传入"2022-01-02"就会删除所有该日期的行 :param sheet_file: 支持传入Google Sheet的文件ID,或者已经初始化完成的表格对象 :param ws_name: 要操作的子工作表名称,默认是新建表格默认的Sheet1 :param date_col: 日期字段所在的列序号,从1开始计数,A列对应1、B列对应2,按实际表格结构调整即可 """ # 本地授权初始化,首次运行会弹出浏览器引导完成Google账号登录授权 gc = pygsheets.authorize(local=True) # 打开目标表格 if isinstance(sheet_file, str): sh = gc.open_by_key(sheet_file) else: sh = sheet_file wks = sh.worksheet_by_title(ws_name) # 读取日期列所有非空单元格值 date_values = wks.get_col(date_col, include_tailing_empty=False) match_row_indexs = [] # 遍历收集所有匹配日期的行号,默认跳过第1行的表头,若表头不在第1行可自行调整判断逻辑 for idx, cell_val in enumerate(date_values, start=1): if idx == 1: continue # 转字符串后去除首尾空格做匹配,兼容单元格存为日期对象、带多余空格的场景 if str(cell_val).strip().startswith(target_date): match_row_indexs.append(idx) # 关键操作:匹配到的行号倒序排列,从表格底部往上逐行删除 for row_num in sorted(match_row_indexs, reverse=True): wks.delete_rows(row_num, 1) # 调用示例 if __name__ == "__main__": # 替换为你自己的Google Sheet ID(表格链接中d/和/edit中间的字符串) YOUR_SHEET_ID = "替换为你自己的表格ID" delete_sheet_rows_by_date( target_date="2022-01-02", sheet_file=YOUR_SHEET_ID, date_col=1 )
实用注意事项
- 匹配逻辑用
startswith是为了兼容表格内日期带时间戳的场景,比如单元格实际存储值为2022-01-02 00:00:00也能正常命中;如果表格内日期是纯字符串格式,直接用==做等值判断也可以 - 如果单次需要删除的行量级达到数百上千行,可以把连续的行号合并后一次性删除,减少API请求次数提升运行速度,小数据量场景直接用上面的代码即可
- 运行代码前要确认授权使用的Google账号拥有目标表格的编辑权限,否则会抛出权限错误
存储在Google Sheet中的数据为带表头的结构化表,第一列为日期字段,其余列为对应业务属性字段。
内容的提问来源于stack exchange,提问作者David Masip
相关产品推荐
相关产品推荐

