我尝试使用一年前使用的旧python代码(在不同的帐户中),但现在它不再工作了,我无法修复它。
def create_new_sheet(sheet_name, sheet_id):
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
SERVICE_ACCOUNT_FILE = 'token.json'
creds = None
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes = SCOPES)
SPREADSHEET_ID = sheet_id
service = build('sheets', 'v4', credentials=creds)
body = {
"requests":{
"addSheet":{
"properties":{
"title":f"{sheet_name}"
}
}
}
}
service.spreadsheets().batchUpdate(spreadsheetId = SPREADSHEET_ID, body = body).execute()
我已经有了令牌,使用它我可以读取数据而没有任何问题,但是当我尝试创建一个新工作表时,会发生以下错误:MalformedError: Service account info was not in the expected format, missing fields client_email.
我基本上在做我过去做过的事情,但现在我有这个错误。有人能帮助我理解这里发生了什么吗?
1条答案
按热度按时间bihw5rsg1#
您收到的错误消息表明您正在尝试使用服务帐户执行此操作,并且您正在使用的名为
token.json
的服务帐户密钥文件没有正确的结构。代码的运行方式取决于您是想对普通用户还是服务帐户使用OAuth。
这是我用来测试service account方法的完整代码:
这是名为
token.json
的服务帐户密钥文件应具有的结构:根据错误消息,您似乎缺少
token.json
文件中的client_email
字段。请确保创建一个新字段,并从GCP控制台正确下载,然后重试。如果你想使用OAuth来验证一个普通用户,这个用户是文件的编辑者,你应该使用下面的代码:
如果使用此方法,请确保删除当前的
token.json
文件,因为这种情况下的结构会有所不同。参考文献: