Sample code for 30+ languages & platforms
C

batchGet (Read Multiple Ranges)

See more Google Sheets Examples

Reads multiple ranges from a Google Sheets spreadsheet in one GET request.

Chilkat C Downloads

C
#include <C_CkJsonObject.h>
#include <C_CkHttpRequest.h>
#include <C_CkHttp.h>
#include <C_CkHttpResponse.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkJsonObject jsonToken;
    HCkHttpRequest req;
    HCkHttp http;
    HCkHttpResponse resp;
    HCkJsonObject json;
    int i;
    int count_i;
    int j;
    int count_j;
    int k;
    int count_k;
    const char *spreadsheetId;
    const char *range;
    const char *majorDimension;
    const char *strVal;

    success = FALSE;

    // 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 = CkJsonObject_Create();
    success = CkJsonObject_LoadFile(jsonToken,"qa_data/tokens/googleSheets.json");
    if (CkJsonObject_HasMember(jsonToken,"access_token") == FALSE) {
        printf("No access token found.\n");
        CkJsonObject_Dispose(jsonToken);
        return;
    }

    // We'll be sending a GET request with query params to this URL:  https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values:batchGet?ranges=Sheet1!A1:A2&ranges=Sheet1!B1:B2
    // The domain is "sheets.googleapis.com"
    // The path is "/v4/spreadsheets/spreadsheetId/values:batchGet"
    req = CkHttpRequest_Create();
    CkHttpRequest_putPath(req,"/v4/spreadsheets/spreadsheetId/values:batchGet");
    CkHttpRequest_putHttpVerb(req,"GET");
    // Add each range to fetch.
    CkHttpRequest_AddParam(req,"ranges","Sheet1!A1:A2");
    CkHttpRequest_AddParam(req,"ranges","Sheet1!B1:B2");

    http = CkHttp_Create();
    CkHttp_putAuthToken(http,CkJsonObject_stringOf(jsonToken,"access_token"));

    // 443 is the SSL/TLS port for HTTPS.
    resp = CkHttpResponse_Create();
    success = CkHttp_HttpSReq(http,"sheets.googleapis.com",443,TRUE,req,resp);
    if (success == FALSE) {
        printf("%s\n",CkHttp_lastErrorText(http));
        CkJsonObject_Dispose(jsonToken);
        CkHttpRequest_Dispose(req);
        CkHttp_Dispose(http);
        CkHttpResponse_Dispose(resp);
        return;
    }

    printf("%s\n",CkHttpResponse_bodyStr(resp));

    json = CkJsonObject_Create();
    CkJsonObject_Load(json,CkHttpResponse_bodyStr(resp));

    // A sample response is shown below.
    // To generate the parsing source code for a JSON response, paste
    // the JSON into this online tool: Generate JSON parsing code

    // {
    //   "spreadsheetId": "1_SO2L-Y6nCayNpNppJLF0r9yHB2UnaCleGCKeE4O0SA",
    //   "valueRanges": [
    //     {
    //       "range": "Sheet1!A1:A2",
    //       "majorDimension": "ROWS",
    //       "values": [
    //         [
    //           "Item"
    //         ],
    //         [
    //           "Wheel"
    //         ]
    //       ]
    //     },
    //     {
    //       "range": "Sheet1!B1:B2",
    //       "majorDimension": "ROWS",
    //       "values": [
    //         [
    //           "Cost"
    //         ],
    //         [
    //           "$20.50"
    //         ]
    //       ]
    //     }
    //   ]
    // }

    spreadsheetId = CkJsonObject_stringOf(json,"spreadsheetId");
    i = 0;
    count_i = CkJsonObject_SizeOfArray(json,"valueRanges");
    while (i < count_i) {
        CkJsonObject_putI(json,i);
        range = CkJsonObject_stringOf(json,"valueRanges[i].range");
        majorDimension = CkJsonObject_stringOf(json,"valueRanges[i].majorDimension");
        j = 0;
        count_j = CkJsonObject_SizeOfArray(json,"valueRanges[i].values");
        while (j < count_j) {
            CkJsonObject_putJ(json,j);
            k = 0;
            count_k = CkJsonObject_SizeOfArray(json,"valueRanges[i].values[j]");
            while (k < count_k) {
                CkJsonObject_putK(json,k);
                strVal = CkJsonObject_stringOf(json,"valueRanges[i].values[j][k]");
                k = k + 1;
            }

            j = j + 1;
        }

        i = i + 1;
    }



    CkJsonObject_Dispose(jsonToken);
    CkHttpRequest_Dispose(req);
    CkHttp_Dispose(http);
    CkHttpResponse_Dispose(resp);
    CkJsonObject_Dispose(json);

    }