web-dev-qa-db-ja.com

PythonでGoogleスプレッドシートAPI v4のシートと最新のシートのリストを取得する

python 3に続く google公式ドキュメント で異なるシートの値を読み書きしようとしています。 rangeName = 'Class Data!A2:E'以下のコードブロック:

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

そして、私は ここからのサンプルコード を使用して値を書き込もうとしています:

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

私が直面している問題は、公式ドキュメントから最新のシート名またはIDを保持できず、最新のAPIリビジョンがランダムなgidを作成していることです(シートgidが何になるかわかりません)。 Google Sheet API v4を使用してシートのリストまたはスプレッドシートの最新の改訂されたシート名またはIDを参照する方法はありますか?

14
nexuscreator

スプレッドシートで「get」メソッドを使用して、シートのリストを取得できます。

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)
36
user4426017

SO PHPライブラリについてはまだSO $ ===ですが、これは関連する質問に対する最初のGoogle結果であるため、ここにこの回答を追加したかっただけです。 。

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

?>
11

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

これは、指定されたシート番号とスプレッドシートIDのシートID値を返すC#メソッドです。

これは、Google Sheets API v4で作成されました。

    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