You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gspread_asyncio创建的Google Sheets无访问权限,求解决方案

解决Google Sheets创建后无访问/编辑权限的问题

你遇到的问题根源是:通过服务账号创建的Google Sheets文档,默认只有该服务账号本身拥有访问权限,普通Google账号无法直接打开或编辑。不需要在Cloud Console反复调整权限,直接在代码中添加权限分配逻辑即可解决。

修改后的完整代码

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, target_email):
    try:
        credentials = service_account.Credentials.from_service_account_file(
            credentials_path,
            scopes=[
                'https://www.googleapis.com/auth/drive',
                'https://www.googleapis.com/auth/spreadsheets'
            ]
        )
       
        agcm = AsyncioGspreadClientManager(lambda: credentials)
        gc_client = await agcm.authorize()
        
        try:
            spreadsheet = await gc_client.open(spreadsheet_name)
            # 若打开已有表格,也可添加权限确保访问正常
            await spreadsheet.share(
                target_email,
                perm_type='user',
                role='writer',
                notify=False
            )
        except SpreadsheetNotFound:
            spreadsheet = await gc_client.create(spreadsheet_name)
            # 给目标邮箱添加编辑权限
            await spreadsheet.share(
                target_email,
                perm_type='user',
                role='writer',
                notify=False  # 设为True会发送权限通知邮件
            )
        
        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

关键修改说明

  1. 新增参数target_email:传入需要赋予权限的个人Google邮箱(比如your-name@gmail.com)
  2. 添加权限分配逻辑:无论是新建还是打开已有表格,都调用spreadsheet.share()方法给指定邮箱分配writer(编辑)权限
  3. 优化权限范围:将原scopes调整为更精准的drive和spreadsheets权限,避免不必要的全权限请求

额外注意事项

  • 确保你的Google Cloud项目已经启用了Google Drive API和Google Sheets API(可在Cloud Console的API库中搜索启用)
  • 调用函数时需传入target_email参数,示例:await upload_file_to_gsheets('credentials.json', csv_data, '测试表格', 'your-email@gmail.com')

内容的提问来源于stack exchange,提问作者newbee12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:35:03