1

http://smartsheet-platform.github.io/api-docs/?python#update-row(s)にある Python の例をほぼそのまま使用しています。違いは、1 つの行で 1 つのセルのみを更新していることです。変数の値の変化を確認できますrow_aが、行は Smartsheet 自体で更新されません。

これは私のコードで、API ガイドに掲載されているコードとほぼ同じです。

row_a = smartsheet.Sheets.get_row(sheetId, 916467282667396)
cell_a = row_a.get_column(5937660066850692)
cell_a.value = 'new value'
row_a.set_column(cell_a.column_id, cell_a)
smartsheet.Sheets.update_rows(sheetId, [row_a])

このコードを実行した後、テキスト「新しい値」が Smartsheet に表示されないことを確認したので、最後の行の前に単語printを追加して、API 呼び出しによって何が返されるかを確認しました。これが結果です (読みやすくするためにインデントを追加しました) ):

{
    "requestResponse": null, 
    "result": {
        "code": 1062, 
        "name": "InvalidRowLocationError", 
        "recommendation": "Do not retry without fixing the problem.", 
        "shouldRetry": false, 
        "message": "Invalid row location.", 
        "statusCode": 400
    }
}

を修正してInvalidRowLocationError、行の更新を Smartsheet に送信するにはどうすればよいですか?

4

3 に答える 3

4

実際には、smartsheet-python-sdk バージョン 1.0.1 の update_rows に関連する 2 つのバグがありますが、回避策もあります。InvalidRowLocationErrorセルがインデントされている行を更新しようとすると、エラーが発生します ( https://github.com/smartsheet-platform/smartsheet-python-sdk/issues/44のバグの説明を参照してください)。NotEditableViaApiErrorセルに数式、他のセルへのリンク、システム値、またはガント値が含まれている行を更新しようとすると、エラーが発生します ( https://github.com/smartsheet-platform/smartsheet-python-sdkのバグの説明を参照してください)。 /issues/42 )。

smartsheet-python-sdkは行全体を更新するため、行のどのセルを更新しようとしても、これらのエラーが発生します。API が機能することに注意することが重要です。したがって、回避策は、Pythonrequestsモジュールを使用して、次のように実際の更新を実行することです。

import requests
url = "https://api.smartsheet.com/2.0/sheets/SHEETID/rows"
payload = "{\"id\": 6436521654937476, \"cells\": [{\"columnId\": 8276294740797316,\"value\": \"new value\"}]}" 
# headers omitted from here for privacy
headers = { YYYYYYYYYYYYYYYYYYYYY }
response = requests.request("PUT", url, data=payload, headers=headers)
print(response.text)

上記のサンプルでは、​​ペイロードには、行全体ではなく、更新したい 1 つのセルのみが含まれています。より読みやすいバージョンのペイロードは次のとおりです (セルが 1 つだけの行オブジェクト)。

{
  "id": 6436521654937476,
  "cells": [
    {
      "columnId": 8276294740797316,
      "value": "new value"
    }
  ]
}
于 2016-04-07T13:12:47.423 に答える
0

特定の行に式が含まれている行の特定のセルのみを更新し、NotEditableViaApiError.

for row in sheet.rows:
    cell = row.get_column(column_id)
    cell.value = 'modified cell value'  # edit the cell locally

    # gather more cells and add to list of cells for row...

    # remove all cells in row and just add back the single cell or list of cells
    row.cells = [cell]
    print my_sheets.update_rows(sheet_id, [row])  # update sheet

行ごとに api 呼び出しがあり、動作させることができますが、少なくとも、特定の行の特定のセルのみを更新するという問題を回避する方法があります。この呼び出しは、行のリスト内のセルのみを更新し、他のセルはそのままにします。

于 2016-10-31T16:18:14.280 に答える
0

ここでの実際の問題は、リクエストで POST ではなく PUT を使用する必要があることです。参照: http://smartsheet-platform.github.io/api-docs/?shell#update-row(s)

于 2016-07-27T06:16:27.393 に答える