You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Smartsheet按列提取数据?现有代码返回行式数据需修正

解决Smartsheet提取列式数据的问题

你的原代码是逐行遍历每一行的单元格,所以输出自然是行式数据。要获取列式格式,我们得换个遍历逻辑:先锁定每一列,再收集该列下所有行的对应单元格值。

调整思路

  1. 先获取工作表的所有列信息(比如列标题、列ID),精准定位每一列;
  2. 遍历每一列,再对工作表的每一行,提取该列对应的单元格值;
  3. 按列组织输出,先标注列标识,再依次输出该列的所有行数据。

调整后的代码示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:52:12