下面的代码创建电子表格(GSheets)并返回一个链接,但是当我尝试打开它并编辑它时,我没有权限这样做。有什么解决办法吗?

问题描述 投票:0回答:1

这是我的代码:

from gspread_asyncio import AsyncioGspreadClientManager
import io
import csv
from google.oauth2 import service_account
from gspread.exceptions import SpreadsheetNotFound

async def upload_file_to_gsheets(credentials_path, csv_string, spreadsheet_name):
    try:

        credentials = service_account.Credentials.from_service_account_file(credentials_path,
                                                                            scopes=[
                                                                                   'https://www.googleapis.com/auth',
                                                                                'https://www.googleapis.com/auth/drive'])
       
        agcm = AsyncioGspreadClientManager(lambda: credentials)
        
        gc_client = await agcm.authorize()
        
        try:
            spreadsheet = await gc_client.open(spreadsheet_name)
        except SpreadsheetNotFound:

            spreadsheet = await gc_client.create(spreadsheet_name)
        .
        worksheet = await spreadsheet.get_worksheet(0)

        
        csv_file = io.StringIO(csv_string)
        reader = csv.reader(csv_file)
        values_list = list(reader)

        
        await worksheet.update('A1', values_list)
        
        spreadsheet_url = spreadsheet.url
        return spreadsheet_url

    except Exception as error:
        print(error)
        return

它返回创建的电子表格的链接;但当我试图阅读它时,我没有得到这样做的许可。我该如何解决这个问题?我应该更改 Google Cloud Console 中的访问设置还是可以使用代码来完成?

我尝试更改 https://console.cloud.google.com 的权限,但没有成功。我还尝试删除并再次创建密钥(也不起作用)。我该如何解决这个问题?我是 python、Google Drive 和 Goggle Sheets API 的新手。请帮忙:)

python google-drive-api google-sheets-api gspread
1个回答
0
投票

我如何解决我的问题:

 # Asynchronously create and initialize the Google Drive API client.
    drive_service = build('drive', 'v3', credentials=credentials)

    # Define the new permission.
    user_permission = {
        'type': 'user',
        'role': 'writer',  # 'owner' is not allowed for service accounts.
        'emailAddress': 'example.com'  # Email of the user to share with.
    }

    # Grant the defined permission.
    drive_service.permissions().create(
        fileId=spreadsheet.id,
        body=user_permission,
        fields='id'
    ).execute()
    return spreadsheet_url
© www.soinside.com 2019 - 2024. All rights reserved.