web-dev-qa-db-fra.com

Obtenir la liste des feuilles et la dernière feuille dans Google tableur api v4 en Python

J'essaie de lire et d'écrire les valeurs de différentes feuilles en python 3 en suivant la documentation officielle de google . Bien que je puisse lire les valeurs de certaines feuilles en utilisant la propriété range dans rangeName = 'Class Data!A2:E' dans le bloc de code mentionné ci-dessous:

discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
    rangeName = 'Class Data!A2:E'
    result = service.spreadsheets().values().get(
        spreadsheetId=spreadsheetId, range=rangeName).execute()
    values = result.get('values', [])

Et j'essaie d'écrire des valeurs en utilisant l'exemple de code à partir d'ici :

requests.append({
    'updateCells': {
        'start': {'sheetId': 0, 'rowIndex': 0, 'columnIndex': 0},
        'rows': [
            {
                'values': [
                    {
                        'userEnteredValue': {'numberValue': 1},
                        'userEnteredFormat': {'backgroundColor': {'red': 1}}
                    }, {
                        'userEnteredValue': {'numberValue': 2},
                        'userEnteredFormat': {'backgroundColor': {'blue': 1}}
                    }, {
                        'userEnteredValue': {'numberValue': 3},
                        'userEnteredFormat': {'backgroundColor': {'green': 1}}
                    }
                ]
            }
        ],
        'fields': 'userEnteredValue,userEnteredFormat.backgroundColor'
    }
})
batchUpdateRequest = {'requests': requests}

service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id,
                                    body=batchUpdateRequest).execute()

Le problème auquel je suis confronté est que je ne suis pas en mesure de conserver le nom ou l'id de la dernière feuille de la documentation officielle et que la dernière révision de l'API rend gid aléatoire (nous pourrions ne pas savoir ce que serait la feuille gid). Existe-t-il un moyen de renvoyer une liste de feuilles ou le dernier nom de feuille de feuille de calcul modifié ou son identifiant à l’aide de google sheet api v4?

11
nexuscreator

Vous pouvez obtenir une liste de feuilles en utilisant la méthode "get" sur les feuilles de calcul:

sheet_metadata = service.spreadsheets().get(spreadsheetId=spreadsheet_id).execute()
sheets = sheet_metadata.get('sheets', '')
title = sheets[0].get("properties", {}).get("title", "Sheet1")
sheet_id = sheets[0].get("properties", {}).get("sheetId", 0)
29
user4426017

Personne n'a encore demandé à ce sujet dans SO pour la bibliothèque PHP, mais je voulais simplement ajouter cette réponse ici car il s'agit du premier résultat de Google pour des questions connexes.

<?php

$sheets = array();

// ... load library and set up client ...
$service = new Google_Service_Sheets($client);

$response = $service->spreadsheets->get($spreadsheetId);
foreach($response->getSheets() as $s) {
    $sheets[] = $s['properties']['title'];
}

return $sheets;

?>
9
WOUNDEDStevenJones

Il s'agit d'une méthode C # qui renvoie la valeur d'identifiant de feuille d'un numéro de feuille spécifié et d'un identifiant de feuille de calcul.

Ceci a été réalisé avec l'API v4 de Google Sheets.

    private static Int32 GetSheetIdFromSheetNum(string sSpreadsheetId, Int32 iSheetNum, SheetsService gsService, ref string sTitle)
    {   //Get the Sheet Id for the specified sheet number and Spreadsheet id.

        Int32 iSheetId = -1;
        Int32 iLoop = -1;

        //Google.Apis.Sheets.v4.Data.Sheet gsSheet;
        Google.Apis.Sheets.v4.Data.Spreadsheet gsSpreadsheet;

        try
        {
            sTitle = string.Empty;
            gsSpreadsheet = gsService.Spreadsheets.Get(sSpreadsheetId).Execute();

            foreach (Sheet gsSheet in gsSpreadsheet.Sheets)
            {
                iLoop += 1;
                if (iLoop != iSheetNum)
                {
                    continue;
                }

                iSheetId = (gsSheet.Properties.SheetId).GetValueOrDefault(-1);      
                sTitle = gsSheet.Properties.Title;
                break;
            }

        }
        catch (Exception ex)
        {
            // Do error processing here.
        }

        return iSheetId;

    } //GetSheetIdFromSheetNum
0
JohnH