如何快速获取Google Sheets某一列中每个单元格的颜色?
优化Pygsheets获取指定列单元格颜色的方案
一、关于get_all_values()仅获取单列数据的方法
完全可以通过指定range参数实现,直接传入目标列的范围即可,示例代码:
# 获取A列的所有值(不含末尾空单元格) column_values = cyber_worksheet.get_all_values( range='A:A', include_tailing_empty=False )
也可以用列索引转换后指定范围(比如第2列对应B列):
import pygsheets # 把列索引转为列地址,再构造范围 col_addr = pygsheets.utils.col_idx_to_addr(2) column_values = cyber_worksheet.get_all_values( range=f'{col_addr}:{col_addr}', include_tailing_empty=False )
二、高效获取指定列单元格颜色的优化方案
原代码耗时高的核心原因是获取了整个工作表的所有单元格对象,网络请求数据量和本地遍历成本都极大。只需针对目标列单独请求单元格,就能大幅提升速度:
方法1:使用get_col()直接获取目标列的单元格对象
get_col()可以直接指定列索引,返回该列的单元格列表,避免多余请求:
import pygsheets # 获取第1列(A列)的单元格对象,不含末尾空单元格 target_column_cells = cyber_worksheet.get_col( col=1, returnas='cell', include_tailing_empty=False ) # 提取所有单元格颜色到列表 color_code = [cell.color for cell in target_column_cells] return color_code
方法2:使用get_range()指定精确范围(已知行数量时)
如果明确知道目标列的行范围(比如1到1200行),可以直接指定精确范围进一步减少请求量:
# 获取A1到A1200的单元格对象 target_range = cyber_worksheet.get_range( 'A1:A1200', returnas='cell' ) # 提取颜色 color_code = [cell.color for cell in target_range] return color_code
优化效果说明
这两种方法都只请求目标列的单元格数据,网络传输的数据量仅为原方案的1/N(N为工作表列数),同时本地无需遍历所有行列,处理速度会有数量级的提升,1200行的场景应该能把耗时压缩到几秒内。
内容的提问来源于stack exchange,提问作者Ran Hirschorn
相关产品推荐
相关产品推荐

