如何从Smartsheet按列提取数据?现有代码返回行式数据需修正
解决Smartsheet提取列式数据的问题
你的原代码是逐行遍历每一行的单元格,所以输出自然是行式数据。要获取列式格式,我们得换个遍历逻辑:先锁定每一列,再收集该列下所有行的对应单元格值。
调整思路
- 先获取工作表的所有列信息(比如列标题、列ID),精准定位每一列;
- 遍历每一列,再对工作表的每一行,提取该列对应的单元格值;
- 按列组织输出,先标注列标识,再依次输出该列的所有行数据。
调整后的代码示例
MySheet = ss_client.Sheets.get_sheet(Sheet_ID) # 遍历每一列 for column in MySheet.columns: print(f"--- 列标题: {column.title} | 列ID: {column.id} ---") # 遍历每一行,提取当前列的单元格值 for row in MySheet.rows: # 通过列ID匹配对应的单元格 cell = next((c for c in row.cells if c.column_id == column.id), None) # 处理空值情况,避免报错 cell_value = cell.value if cell and cell.value is not None else "空值" print(f"行ID: {row.id} | 值: {cell_value}") print('') # 列之间空行分隔
代码说明
MySheet.columns:获取工作表的所有列对象,包含列标题、ID等关键信息;next((c for c in row.cells if c.column_id == column.id), None):在当前行的单元格中,找到与当前列ID匹配的单元格,找不到则返回None;- 增加了空值处理,避免因单元格无值导致的异常;
- 输出时先标注列的标题和ID,再逐行输出该列的对应数据,清晰区分不同列的内容。
如果需要把数据存储成结构化格式(而非直接打印),可以修改成这样:
# 存储列式数据的字典,键为列标题,值为该列的所有行数据 column_data = {} for column in MySheet.columns: column_values = [] for row in MySheet.rows: cell = next((c for c in row.cells if c.column_id == column.id), None) column_values.append(cell.value if cell and cell.value is not None else None) column_data[column.title] = column_values # 打印结构化的列式数据 for col_title, values in column_data.items(): print(f"{col_title}: {values}")
这样就能得到完全按列组织的数据啦!
内容的提问来源于stack exchange,提问作者Sandhya
相关产品推荐
相关产品推荐

