如何在 Smartsheet Python SDK 中使用搜索结果?
How to use result of search in Smartsheet Python SDK?
启动程序后
results = smart.Search.search("2244113312180")
print(results)
获取数据
{"results":
[{"contextData": ["2244113312180"],
"objectId": 778251154810756,
"objectType": "row",
"parentObjectId": 3648397300262788,
"parentObjectName": "Sample Sheet",
"parentObjectType": "sheet",
"text": "2244113312180"},
{"contextData": ["2244113312180"],
"objectId": 7803446734415748,
"objectType": "row",
"parentObjectId": 3648397300262788,
"parentObjectName": "Sample Sheet",
"parentObjectType": "sheet",
"text": "2244113312180"}],
"totalCount": 2}
如何在我的程序中正确使用它们?
请提供正确的用法示例。
以及如何找到 id_column 中找到值“2244113312180”的值?
new_row = smartsheet.models.Row()
new_row.id = results.objectId
抱歉,我没有立即写下错误。我无法使用结果中的属性。字符串:
new_row.id = results.objectId
导致错误
AttributeError: 'SearchResult' object has no attribute 'objectId'
感谢您的帮助!
P.S。我找到了方法。
results = smart.Search.search("2244113312180")
text = str(results)
json_op = json.loads(text)
for i in json_op["results"]:
new_row = smartsheet.models.Row()
new_row.id = i["objectId"]
我不知道这是不是一个好的解决方案。
根据 Smartsheet API 文档中的 SearchResultItem Object 定义,搜索结果项永远不会包含有关值所在列的信息。结果 JSON 您 posted 显示,如果在 sheet 的行中找到指定值(即在该行包含的任何单元格中),则相应的搜索结果项将标识 sheet ID (parentObjectId
) 和行 ID (objectId
)。
然后您可以使用这两个值来检索行,如文档的 Get Row 部分所述:
row = smartsheet_client.Sheets.get_row(
4583173393803140, # sheet_id
2361756178769796 # row_id
)
然后您可以遍历 row.cells
数组,检查每个单元格的 value
属性 以确定它是否与您之前搜索的值匹配。当您找到包含该值的 cell
对象时,该 cell
对象的 column_id
属性 将为您提供匹配值所在的列 ID。
更新:
感谢您澄清原始 post 中的信息。我正在更新此答案以提供一个完整的代码示例,该示例实现了我之前描述的方法。希望这对您有所帮助!
此代码示例执行以下操作:
- 搜索 Smartsheet 中的所有内容(正在使用的 API 令牌的持有者可以访问)字符串值
- 遍历搜索结果项以处理任何“行”结果(即字符串出现在 sheet 的单元格中的任何位置)
- 用字符串
new value
替换 sheet(的单元格)中的任何匹配项
# set search criteria
query = '2244113312180'
# search everything
search_results = smart.Search.search(query)
# loop through results
# (acting upon only search results that appear within a row of a sheet)
for item in search_results.results:
if item.object_type == 'row':
# get row
row = smart.Sheets.get_row(
item.parent_object_id, # sheet_id
item.object_id # row_id
)
# find the cell that contains the value and update that cell value
for cell in row.cells:
if cell.value == query:
# build new cell value
new_cell = smartsheet.models.Cell()
new_cell.column_id = cell.column_id
new_cell.value = "new value"
new_cell.strict = False
# build the row to update
new_row = smartsheet.models.Row()
new_row.id = item.object_id
new_row.cells.append(new_cell)
# update row
result = smart.Sheets.update_rows(
item.parent_object_id, # sheet_id
[new_row])
启动程序后
results = smart.Search.search("2244113312180")
print(results)
获取数据
{"results":
[{"contextData": ["2244113312180"],
"objectId": 778251154810756,
"objectType": "row",
"parentObjectId": 3648397300262788,
"parentObjectName": "Sample Sheet",
"parentObjectType": "sheet",
"text": "2244113312180"},
{"contextData": ["2244113312180"],
"objectId": 7803446734415748,
"objectType": "row",
"parentObjectId": 3648397300262788,
"parentObjectName": "Sample Sheet",
"parentObjectType": "sheet",
"text": "2244113312180"}],
"totalCount": 2}
如何在我的程序中正确使用它们? 请提供正确的用法示例。
以及如何找到 id_column 中找到值“2244113312180”的值?
new_row = smartsheet.models.Row()
new_row.id = results.objectId
抱歉,我没有立即写下错误。我无法使用结果中的属性。字符串:
new_row.id = results.objectId
导致错误
AttributeError: 'SearchResult' object has no attribute 'objectId'
感谢您的帮助!
P.S。我找到了方法。
results = smart.Search.search("2244113312180")
text = str(results)
json_op = json.loads(text)
for i in json_op["results"]:
new_row = smartsheet.models.Row()
new_row.id = i["objectId"]
我不知道这是不是一个好的解决方案。
根据 Smartsheet API 文档中的 SearchResultItem Object 定义,搜索结果项永远不会包含有关值所在列的信息。结果 JSON 您 posted 显示,如果在 sheet 的行中找到指定值(即在该行包含的任何单元格中),则相应的搜索结果项将标识 sheet ID (parentObjectId
) 和行 ID (objectId
)。
然后您可以使用这两个值来检索行,如文档的 Get Row 部分所述:
row = smartsheet_client.Sheets.get_row(
4583173393803140, # sheet_id
2361756178769796 # row_id
)
然后您可以遍历 row.cells
数组,检查每个单元格的 value
属性 以确定它是否与您之前搜索的值匹配。当您找到包含该值的 cell
对象时,该 cell
对象的 column_id
属性 将为您提供匹配值所在的列 ID。
更新:
感谢您澄清原始 post 中的信息。我正在更新此答案以提供一个完整的代码示例,该示例实现了我之前描述的方法。希望这对您有所帮助!
此代码示例执行以下操作:
- 搜索 Smartsheet 中的所有内容(正在使用的 API 令牌的持有者可以访问)字符串值
- 遍历搜索结果项以处理任何“行”结果(即字符串出现在 sheet 的单元格中的任何位置)
- 用字符串
new value
替换 sheet(的单元格)中的任何匹配项
# set search criteria
query = '2244113312180'
# search everything
search_results = smart.Search.search(query)
# loop through results
# (acting upon only search results that appear within a row of a sheet)
for item in search_results.results:
if item.object_type == 'row':
# get row
row = smart.Sheets.get_row(
item.parent_object_id, # sheet_id
item.object_id # row_id
)
# find the cell that contains the value and update that cell value
for cell in row.cells:
if cell.value == query:
# build new cell value
new_cell = smartsheet.models.Cell()
new_cell.column_id = cell.column_id
new_cell.value = "new value"
new_cell.strict = False
# build the row to update
new_row = smartsheet.models.Row()
new_row.id = item.object_id
new_row.cells.append(new_cell)
# update row
result = smart.Sheets.update_rows(
item.parent_object_id, # sheet_id
[new_row])