如何通过gspread Python库获取电子表格行列的宽高?
获取Google Sheets行列宽高(gspread实现)
gspread的get_effective_format方法仅返回单元格的样式属性(如颜色、字体、边框),行列的宽高属于工作表的行列元数据,不在单元格格式范围内,所以无法通过该方法获取。要获取当前行列的尺寸,需要直接调用Google Sheets API的底层接口,gspread提供了request方法来实现这一点。
实现步骤与代码示例
- 利用gspread的
request方法调用spreadsheets.get接口,指定返回行列的pixelSize属性(即宽高的像素值)。 - 过滤返回结果,提取目标工作表的行列尺寸数据。
import gspread from google.oauth2.service_account import Credentials # 初始化认证(已完成认证可直接复用现有client) scopes = ["https://www.googleapis.com/auth/spreadsheets"] creds = Credentials.from_service_account_file("你的凭证文件路径.json", scopes=scopes) client = gspread.authorize(creds) # 打开目标表格 spreadsheet = client.open("你的表格名称") spreadsheet_id = spreadsheet.id # 调用Sheets API获取行列尺寸 response = client.request( method="get", url=f"https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet_id}", params={ # 指定仅返回行列的像素尺寸,减少数据传输量 "fields": "sheets(properties(title),rowMetadata(pixelSize),columnMetadata(pixelSize))" } ) # 解析并输出结果 sheets_data = response.json()["sheets"] for sheet in sheets_data: sheet_title = sheet["properties"]["title"] print(f"=== {sheet_title} ===") # 获取所有行高 if "rowMetadata" in sheet: row_heights = [idx+1 for idx, row in enumerate(sheet["rowMetadata"])] row_pixels = [row["pixelSize"] for row in sheet["rowMetadata"]] print("行高(像素):") for row_num, pixel in zip(row_heights, row_pixels): print(f"行{row_num}: {pixel}px") # 获取所有列宽 if "columnMetadata" in sheet: # 列号转字母(如1→A,2→B) def col_num_to_letter(num): letter = "" while num > 0: num, remainder = divmod(num - 1, 26) letter = chr(65 + remainder) + letter return letter col_letters = [col_num_to_letter(idx+1) for idx, col in enumerate(sheet["columnMetadata"])] col_pixels = [col["pixelSize"] for col in sheet["columnMetadata"]] print("\n列宽(像素):") for col_letter, pixel in zip(col_letters, col_pixels): print(f"列{col_letter}: {pixel}px")
优化技巧
- 如果只需要特定工作表的尺寸,可在
params中添加ranges参数指定工作表,例如"ranges": "Sheet1",避免返回所有工作表的数据。 - 若仅需单个行/列的尺寸,可细化
ranges范围,比如"ranges": "Sheet1!3:3"(获取第3行高度)或"ranges": "Sheet1!C:C"(获取C列宽度)。
内容的提问来源于stack exchange,提问作者Adam Higgins
相关产品推荐
相关产品推荐

