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

如何将Alteryx SQL Editor语句转为Smartsheet API的Python调用?

使用Python调用Smartsheet API筛选非空列数据

我目前使用Alteryx Designer连接Smartsheet API,在Alteryx的「Choose Table or Specify Query」对话框的「SQL Editor」中编写了如下代码:

SELECT * FROM "Proj PAGE 1__1234567891234567s_" as AM WHERE AM."ABC DEF" IS NOT NULL

现在我希望通过Python调用Smartsheet API来执行该查询,以获取「ABC DEF」列不为空的数据。我已成功连接Smartsheet API并获取整个工作表,但不清楚如何添加条件来请求数据子集,请问该如何实现这一需求?

两种实现方法

方法一:用Smartsheet API自带的筛选参数(推荐)

这种方法直接在API请求阶段过滤数据,减少传输量,效率更高。步骤如下:

  1. 先找到目标列ABC DEF对应的列ID(Smartsheet API用列ID而非列名做筛选)
  2. 调用API时传入筛选条件,只拉取符合要求的行

示例代码:

import smartsheet

# 初始化客户端(你应该已经配置好API密钥了)
smartsheet_client = smartsheet.Smartsheet('你的API密钥')

# 工作表ID:从Alteryx表名里的数字部分提取,比如示例里的1234567891234567
sheet_id = 1234567891234567

# 第一步:获取列信息,找到「ABC DEF」的column_id
sheet_columns = smartsheet_client.Sheets.get_sheet(sheet_id, include='columns').columns
target_column_id = None
for col in sheet_columns:
    if col.title == 'ABC DEF':
        target_column_id = col.id
        break

# 第二步:设置筛选规则,只取目标列不为空的行
filter_rules = {
    "filter": {
        "columnId": target_column_id,
        "operator": "NOT_EMPTY"
    }
}

# 获取过滤后的工作表数据
filtered_sheet = smartsheet_client.Sheets.get_sheet(
    sheet_id,
    query_params=filter_rules
)

# 遍历处理结果
for row in filtered_sheet.rows:
    for cell in row.cells:
        if cell.column_id == target_column_id:
            print(f"行ID: {row.id}, ABC DEF值: {cell.value}")
            break

方法二:获取全量数据后本地过滤

如果你已经能拿到整个工作表的数据,直接在Python里过滤就行:

# 假设你已经获取了全量工作表数据,存在full_sheet变量中
filtered_rows = []
target_column_id = None

# 先定位目标列ID
for col in full_sheet.columns:
    if col.title == 'ABC DEF':
        target_column_id = col.id
        break

# 筛选出目标列不为空的行
for row in full_sheet.rows:
    for cell in row.cells:
        if cell.column_id == target_column_id:
            # 排除空值和空字符串
            if cell.value is not None and cell.value.strip() != '':
                filtered_rows.append(row)
            break

# 处理筛选后的行
for row in filtered_rows:
    print(f"符合条件的行ID: {row.id}")

注意事项

  • Smartsheet API的筛选只支持简单条件,复杂逻辑(比如多条件组合)需要在本地处理
  • 匹配列名时注意大小写和空格,确保和工作表里的列名完全一致
  • 优先用API筛选,尤其是数据量较大的时候,能节省带宽和处理时间

内容的提问来源于stack exchange,提问作者floss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:35:07