Учетная запись службы Google Невозможно редактировать / обновлять листы Google с помощью Google - PullRequest
0 голосов
/ 12 января 2020

Это продолжение вопроса StackOverFlow.

В python можно ли редактировать общедоступный общий лист Google без кода авторизации?

Какие советы по использованию учетной записи службы g-suite для доступ к листам Google.

import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://www.googleapis.com/auth/spreadsheets']
credentials = ServiceAccountCredentials.from_json_keyfile_name('### downloaded JSON file ###', scope)
gc = gspread.authorize(credentials)

sht1 = gc.open_by_key('1wj9L7Hn779GKP0s4MblkU1wHcqaVcG_E2YKAo1vdof0')

Я сделал это, и я могу нормально читать значения с листа.

#Open by Gdrive ID
worksheet1 = gc.open_by_key('1qlIZAAK32fTb20KeOr9f-TAxYz7yQnvHUsdGP9Iakrc').sheet1
worksheet1.col_values(3)

>['value1', 'value2', 'value3']

Но когда я пытаюсь обновить ячейку, я получаю отказано в разрешении ошибка.

query = 'insert this'
worksheet1.update_cell(len(values_list)+1, 3, query)

Это вывод

---------------------------------------------------------------------------
APIError                                  Traceback (most recent call last)
<ipython-input-9-9e7f86cb0411> in <module>()
----> 1 worksheet1.update_cell(len(values_list)+1, 3, query)

2 frames
/usr/local/lib/python3.6/dist-packages/gspread/models.py in update_cell(self, row, col, value)
    737             },
    738             body={
--> 739                 'values': [[value]]
    740             }
    741         )

/usr/local/lib/python3.6/dist-packages/gspread/models.py in values_update(self, range, params, body)
    174         """
    175         url = SPREADSHEET_VALUES_URL % (self.id, quote(range))
--> 176         r = self.client.request('put', url, params=params, json=body)
    177         return r.json()
    178 

/usr/local/lib/python3.6/dist-packages/gspread/client.py in request(self, method, endpoint, params, data, json, files, headers)
     77             return response
     78         else:
---> 79             raise APIError(response)
     80 
     81     def list_spreadsheet_files(self):

APIError: {
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

Подробности и то, что я пробовал до сих пор.

В моей учетной записи службы используется тот же адрес электронной почты, что и в учетной записи Google Drive, которую я Я использую для размещения моих листов Google. Так что я должен иметь возможность редактировать лист из моей учетной записи службы.

...