获取Python中google电子表格api v4中的工作表和最新工作表列表

时间:2016-07-07 12:40:21

标签: python google-spreadsheet-api google-sheets-api

我正在尝试在google official documentation之后的python 3中读取和写入不同工作表的值。虽然我能够使用下面提到的代码块中的rangeName = 'Class Data!A2:E'中的range属性读取某些工作表中的值:

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

我正在尝试使用sample code from here编写值:

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?

5 个答案:

答案 0 :(得分:32)

您可以使用" 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)

答案 1 :(得分:9)

目前还没有人在PHP上询问这个问题,但我只是想在这里添加这个答案,因为这是相关问题的第一个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;

?>

答案 2 :(得分:2)

对于那些寻求nodejs解决方案的人:

const { google } = require("googleapis")

// Assuming auth has already been generated
const getSheets = async (auth, spreadsheetId) => {
  const sheets = google.sheets({version: "v4", auth});
  const result = (await sheets.spreadsheets.get({ 
    spreadsheetId 
  })).data.sheets.map((sheet) => {
    return sheet.properties.title
  })
  return result
}

This是从await sheets.spreadsheets.get({ spreadsheetId })返回的内容

然后,使用this type,我映射到data.sheets的结果并返回所有标题。

看起来它按照标题在实际Google表格中的显示顺序返回标题。

如果您尝试生成身份验证令牌,则look here

答案 3 :(得分:0)

这是一种C#方法,它返回指定的工作表编号和电子表格ID的工作表ID值。

这是通过Google Sheets API v4实现的。

carrier

答案 4 :(得分:0)

对于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)