使用Gspread读取Google Sheets时如何保留空值(None/空字符串)?
解决gspread读取Google Sheets时保留空列值的问题
当然可以实现!你当前遇到的问题是因为gspread的Range.value属性默认会自动截断每行末尾的空单元格,所以只返回了有数据的A列内容。下面给你两种实用的解决方案,都能让返回的嵌套列表包含对应空列的None(或空字符串):
方法一:手动遍历单元格(最精准)
这种方法会逐个获取指定范围内的每个单元格值,确保不会遗漏任何位置的空单元格,适合需要精确控制每个单元格值的场景:
FN = "TestSheetGSPREAD" wb1 = gc.open(FN) ws1 = wb1.get_worksheet(0) # 获取A3:H100范围的所有单元格对象 cell_range = ws1.range('A3:H100') # 计算每行的列数(A到H共8列) cols_count = 8 # 将单元格对象按行分组 rows_cells = [cell_range[i:i+cols_count] for i in range(0, len(cell_range), cols_count)] # 转换为包含None的嵌套列表 data = [] for row in rows_cells: # 空单元格的value属性为None,直接保留即可 row_values = [cell.value for cell in row] data.append(row_values)
这样处理后,每行都会严格包含8个元素,空单元格对应的值就是None。
方法二:补全每行的空值(更简洁)
如果确定你的目标范围是固定的8列(A到H),且只有每行末尾的列是空的,那么可以先获取原始数据,再手动补全空值到指定列数:
FN = "TestSheetGSPREAD" wb1 = gc.open(FN) ws1 = wb1.get_worksheet(0) # 获取原始数据(仅返回有内容的部分) raw_data = ws1.get('A3:H100').value # 目标列数 target_cols = 8 # 补全每行的空值为None data = [row + [None] * (target_cols - len(row)) for row in raw_data]
这种方法代码更简洁,运行效率也更高,完美适配你的场景(仅A列有数据,其余列全空)。
如果希望空值用空字符串''代替None,只需要把代码中的[None]改成['']即可。
内容的提问来源于stack exchange,提问作者Rapid1898
相关产品推荐
相关产品推荐

