使用Python与Google Sheets API新建工作表报错:缺失client_email求助
问题分析与解决步骤
核心错误原因
你遇到的MalformedError: Service account info was not in the expected format, missing fields client_email,本质是代码用错了认证文件:
- 代码里的
service_account.Credentials.from_service_account_file()方法,要求传入Google服务账号的JSON密钥文件,这类文件必须包含client_email、private_key、type: "service_account"等核心字段。 - 你当前用的
token.json应该是OAuth2授权生成的用户令牌文件,而非服务账号密钥,这类文件没有client_email字段,所以触发格式错误。
具体解决步骤
- 替换认证文件:
去Google Cloud控制台找到对应项目的服务账号,生成新的JSON密钥文件(建议命名为service_account_key.json区分),然后修改代码里的文件路径:SERVICE_ACCOUNT_FILE = 'service_account_key.json' - 修复请求格式错误:
原代码中batchUpdate的body格式有误,requests必须是数组而非单个对象,否则后续会触发请求失败,修正后:body = { "requests": [ { "addSheet": { "properties": { "title": f"{sheet_name}" } } } ] } - 确认权限配置:
把服务账号的client_email添加到目标Google表格的共享列表,授予编辑权限——你之前能读取数据可能是表格设为公开可读取,但创建工作表需要编辑权限。
补充说明
之前代码能运行,是因为当时用的是正确的服务账号密钥文件,现在大概率是替换了文件、密钥文件损坏或丢失核心字段,导致认证失败。
内容的提问来源于stack exchange,提问作者Marcos Dias
相关产品推荐
相关产品推荐

