wake-up-neo.com

Liste der Tabellen und neuesten Tabellen in Google Spreadsheet api v4 in Python abrufen

Ich versuche, Werte verschiedener Tabellen in Python 3 nach der offiziellen Dokumentation von google zu lesen und zu schreiben. Ich kann zwar Werte aus bestimmten Tabellen mit der Range-Eigenschaft in rangeName = 'Class Data!A2:E' im folgenden Codeblock lesen:

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', [])

Und ich versuche, Werte mit dem Beispielcode von hier aus zu schreiben :

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()

Das Problem, mit dem ich konfrontiert bin, ist, dass ich nicht in der Lage bin, den neuesten Blattnamen oder die ID von der offiziellen Dokumentation beizubehalten, und da die letzte API-Revision zufällige GIDs erstellt (möglicherweise wissen wir nicht, was die GID sein würde). Gibt es eine Möglichkeit, die Liste der Tabellen oder Tabellen mit dem neuesten überarbeiteten Blattnamen oder der ID über Google Sheet API V4 zu beziehen?

11
nexuscreator

Sie können eine Liste der Arbeitsblätter abrufen, indem Sie in Tabellenkalkulationen die Methode "get" verwenden:

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

Bisher hat noch niemand auf SO nach der PHP -Bibliothek gefragt, aber ich wollte diese Antwort hier nur hinzufügen, da dies das erste Google-Ergebnis für verwandte Fragen ist.

<?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

Für Python.

service = build('sheets', 'v4', credentials=creds)

sheet_metadata = service.spreadsheets().get(spreadsheetId=SHEET_ID).execute()

properties = sheet_metadata.get('sheets')
for  item in properties:

   if item.get("properties").get('title') == 'SHEET_TITILE':
       sheet_id = (item.get("properties").get('sheetId'))

print (sheet_id)
1
David Wainaina

Dies ist eine C # -Methode, die den Blatt-ID-Wert einer angegebenen Blattnummer und einer Tabellenkalkulations-ID zurückgibt.

Dies wurde mit der Google Sheets API v4 gemacht.

    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