使用gspread读取含列表内容的Google Sheets单元格返回空值问题
问题触发原因
worksheet.get_all_values()默认取值参数为value_render_option='FORMATTED_VALUE',该模式仅能读取单元格存储的普通格式化文本,无法识别两类特殊格式内容:- 开启多选模式的数据验证下拉列表生成的结构化条目
- 单元格内嵌套的富文本列表、智能芯片类非纯文本内容
- 返回空值的单元格存储的是多选下拉生成的结构化列表,不属于普通文本范畴,因此默认读取逻辑会返回空值,无法拿到预期的列表内容(预期条目为Conversation practice、Advice and mentorship、Anything!)。
相关异常示例:
解决方案
方案1:调整取值渲染参数(优先使用)
修改get_all_values传参,指定读取无格式原始值,跳过展示层格式化过滤逻辑:
# 指定渲染模式为无格式原始值,可识别大部分结构化存储的下拉多选内容 data = worksheet.get_all_values(value_render_option='UNFORMATTED_VALUE')
如果上述模式仍无法正常读取,替换参数为value_render_option='FORMULA',该模式会直接读取单元格底层存储内容,不做任何展示层格式化处理。
方案2:单独读取异常单元格的富文本内容
如果调整全局参数后对应单元格仍返回空,说明列表内容以富文本片段形式存储,可针对指定单元格单独读取富文本片段拼接结果:
# gspread原生行列索引从1开始计数,列表索引data[3][5]对应表格第4行、第6列 target_cell = worksheet.cell(row=4, col=6, value_render_option='UNFORMATTED_VALUE') cell_value = target_cell.value if not cell_value: list_items = [] # 遍历富文本片段提取有效内容 for text_run in target_cell.text_format.runs: content = text_run.get('content', '').strip() if content: list_items.append(content) # list_items即为预期的三个条目组成的列表 cell_value = list_items
注意:Python列表索引从0开始计数,gspread接口的行列参数从1开始计数,单独读取单元格时注意偏移量,避免坐标错位。
内容的提问来源于stack exchange,提问作者Benjbear
相关产品推荐
相关产品推荐

