Sample code for 30+ languages & platforms
PureBasic

Google Sheets - Update (Set Values in a Range)

See more Google Sheets Examples

Sets values in a range of a spreadsheet. This example will demonstrate by first getting a range, then changing some values in the JSON, and then HTTPS PUT the changes back to the Google Sheet.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    ; This example uses a previously obtained access token having permission for the 
    ; Google Sheets scope.

    ; In this example, Get Google Sheets OAuth2 Access Token, the access
    ; token was saved to a JSON file.  This example fetches the access token from the file..
    jsonToken.i = CkJsonObject::ckCreate()
    If jsonToken.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/googleSheets.json")
    If CkJsonObject::ckHasMember(jsonToken,"access_token") = 0
        Debug "No access token found."
        CkJsonObject::ckDispose(jsonToken)
        ProcedureReturn
    EndIf

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHttp::setCkAuthToken(http, CkJsonObject::ckStringOf(jsonToken,"access_token"))

    ; First get the cells in the range A1:B5
    CkHttp::ckSetUrlVar(http,"range","Sheet1!A1:B5")
    CkHttp::ckSetUrlVar(http,"spreadsheetId","1_SO2L-Y6nCayNpNppJLF0r9yHB2UnaCleGCKeE4O0SA")
    jsonResponse.s = CkHttp::ckQuickGetStr(http,"https://sheets.googleapis.com/v4/spreadsheets/{$spreadsheetId}/values/{$range}")
    If CkHttp::ckLastMethodSuccess(http) = 0
        Debug CkHttp::ckLastErrorText(http)
        CkJsonObject::ckDispose(jsonToken)
        CkHttp::ckDispose(http)
        ProcedureReturn
    EndIf

    Debug jsonResponse

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::setCkEmitCompact(json, 0)
    CkJsonObject::ckLoad(json,jsonResponse)

    ; A sample response is shown below.

    ; {
    ;   "range": "Sheet1!A1:B5",
    ;   "majorDimension": "ROWS",
    ;   "values": [
    ;     [
    ;       "Item",
    ;       "Cost"
    ;     ],
    ;     [
    ;       "Wheel",
    ;       "$20.50"
    ;     ],
    ;     [
    ;       "Door",
    ;       "$15"
    ;     ],
    ;     [
    ;       "Engine",
    ;       "$100"
    ;     ],
    ;     [
    ;       "Totals",
    ;       "$135.50"
    ;     ]
    ;   ]
    ; }

    ; We're going to change the cost of the Engine to $120, and the Totals to $155.50

    CkJsonObject::setCkI(json, 3)
    CkJsonObject::setCkJ(json, 1)
    CkJsonObject::ckUpdateString(json,"values[i][j]","$120")
    CkJsonObject::setCkI(json, 4)
    CkJsonObject::ckUpdateString(json,"values[i][j]","$155.50")

    ; Show the updated JSON.
    Debug CkJsonObject::ckEmit(json)

    ; Update the Google Sheet using a PUT request.
    CkJsonObject::setCkEmitCompact(json, 1)
    urlToUpdate.s = "https://sheets.googleapis.com/v4/spreadsheets/{$spreadsheetId}/values/{$range}?valueInputOption=USER_ENTERED"
    xyz.s = CkHttp::ckQuickGetStr(http,urlToUpdate)
    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpJson(http,"PUT",urlToUpdate,json,"application/json",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkJsonObject::ckDispose(jsonToken)
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(json)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    ; Examine the response..
    Debug "response status code = " + Str(CkHttpResponse::ckStatusCode(resp))
    Debug "response body:"
    Debug CkHttpResponse::ckBodyStr(resp)

    ; A sample response body:

    ; {
    ;   "spreadsheetId": "1_SO2L-Y6nCayNpNppJLF0r9yHB2UnaCleGCKeE4O0SA",
    ;   "updatedRange": "Sheet1!A1:B5",
    ;   "updatedRows": 5,
    ;   "updatedColumns": 2,
    ;   "updatedCells": 10
    ; }


    CkJsonObject::ckDispose(jsonToken)
    CkHttp::ckDispose(http)
    CkJsonObject::ckDispose(json)
    CkHttpResponse::ckDispose(resp)


    ProcedureReturn
EndProcedure