You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取Google Sheets指定列含特定字符的对应行数据

解决方案

原有代码问题

之前的代码逻辑是定位第17列(Q列)首个空值所在行,仅读取单行列B的内容,只能拿到单行数据,无法实现多条件行筛选。
原有实现代码:

gc = gspread.authorize(credentials)

def grab_available_row(wks):
    str_list = list(filter(None, wks.col_values(17)))
    return str(len(str_list)+1) 

wks = gc.open("test").worksheet("Logs")
grab_row = grab_available_row(wks)

try:
    GrabRequestTest = wks.acell("B{}".format(grab_row)).value
except:
    pass

try:
    print(GrabRequestTest)
    ctypes.windll.user32.MessageBoxW(0, "DONE!!!", "DONE!!!", 1)
    sys.exit()
except:
    pass

目标需求

  • 筛选Logs工作表中第17列包含特定字符(示例为X)的所有行
  • 提取符合条件行的全部单元格值,过滤不符合条件的行
  • 输出的结构化数据可直接用于后续邮件合并批量生成docx的流程

可直接运行的实现代码

import gspread
# 如果需要保留弹窗逻辑就导入对应的库,不需要可以删掉
# import ctypes
# import sys

# 保持原有的授权逻辑即可
gc = gspread.authorize(credentials)
wks = gc.open("test").worksheet("Logs")

# 筛选配置,可根据实际需求修改
FILTER_COLUMN = 17  # 要筛选的列号,第17列对应Q列
MATCH_KEYWORD = "X" # 要匹配的特定字符

def filter_rows_by_col(worksheet, filter_col, keyword):
    # 一次性拉取全表所有数据,比逐单元格调用API效率高很多,避免触发频率限制
    all_table_data = worksheet.get_all_values()
    matched_rows = []
    for row in all_table_data:
        # 跳过列数不足的异常行,防止索引报错
        if len(row) < filter_col:
            continue
        # 匹配规则:单元格内容包含关键词即命中
        # 如果需要完全相等才命中,把判断条件改成 row[filter_col-1] == keyword 即可
        if keyword in row[filter_col - 1]:
            matched_rows.append(row)
    return matched_rows

if __name__ == "__main__":
    result = filter_rows_by_col(wks, FILTER_COLUMN, MATCH_KEYWORD)
    # 逐行打印匹配到的结果
    for index, row_data in enumerate(result, 1):
        print(f"匹配行{index}数据:{row_data}")
    
    # result就是所有符合条件的行数据,二维列表格式,每个子元素对应一行的所有列值
    # 后续直接把result传入邮件合并逻辑即可

    # 原有完成弹窗可按需保留
    # ctypes.windll.user32.MessageBoxW(0, f"筛选完成,共找到{len(result)}条符合条件的记录", "处理完成", 1)

注意事项

  • gspread返回的行数据是Python列表,下标从0开始计数,和表格从1开始的列号差1位,因此取第17列值时需要用row[16],代码里已经做了对应偏移处理
  • 全量拉取数据的方式比逐行逐单元格调用API快10~100倍,针对行数较多的表格也能快速处理
  • 如果需要支持不区分大小写匹配,可以把判断条件改成keyword.lower() in row[filter_col-1].lower()

内容的提问来源于stack exchange,提问作者nty51

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 02:39:09