python - 更新 Google 电子表格单元格 (python)
问题描述
我读过(相当)类似的帖子,但我无法解决我的问题,而且谷歌文档并不是 100% 有用,因为它们没有提供真实的例子。
问题是我遇到了谷歌表格的问题。我想要做的是更新谷歌表格中的单元格。基本上,我阅读了一张表格,如果特定列没有特定的单词/状态,我会使用 selenium 进行自动化(我不向你展示这一步,因为它不重要),一旦完成,我会写在我的 Google 工作表的列中出现“OK”字样。此栏为空或上面写有“OK”字样。我能够阅读工作表并进行自动化操作,但在尝试更新工作表时出现错误。
这是我的代码(基本上是谷歌的代码):
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
SPREADSHEET_ID = '1cuT66AD3TBQ-1IWCisB0pUPzlw-iOuuU7vO2TqRj3bQ' #control seguimiento robot
WORKSHEET_NAME = 'PRUEBAS DAVID cambio estado TAS'
async def leerGoogleSheet():
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
# pass
flow = InstalledAppFlow.from_client_secrets_file(
'client_secret.json', SCOPES)
creds = flow.run_local_server(port=0)
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=SPREADSHEET_ID,
range=WORKSHEET_NAME).execute()
values = result.get('values', [])
print('result: ' + str(result))
print('range: ' + str(range))
print('values: ' + str(result['values']))
print('WO: ' + str(result['values'][1][1]))
if not values:
print('No data found.')
print(traceback)
else:
losDatos = []
for row in range(1, len(values)):
# print('num_fila:' +str(num_fila))
if 'TAS' in values[row][0]:
if values[row][11] == 'Pendiente':
try:
if values[row][12]:
print('ya tiene valor OK')
pass
except:
print('Hay TAS')
datos = []
datos.append(values[row][0]) #tas
datos.append(values[row][1]) #wo
datos.append(row)
losDatos.append(datos)
await escribirEnSheet(service, row)
else:
print('No hay TAS')
print(losDatos)
#CAMBIAR ESTADO
async def escribirEnSheet(service, row):
range_ = 'M'+str(row)
value_input_option = 'RAW' # TODO: Update placeholder value.
values = ['OK']
value_range_body = {'values': values,
'majorDimension' : 'COLUMNS'}
print('voy a hacer la request para escribir')
request = service.spreadsheets().values().update(spreadsheetId=SPREADSHEET_ID, range=range_, valueInputOption=value_input_option, body=value_range_body)
response = request.execute()
print('ya he escrito')
这是我得到的错误:
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://sheets.googleapis.com/v4/spreadsheets/1cuT66AD3TBQ-1IWCisB0pUPzlw-iOuuU7vO2TqRj3bQ/values/M2?valueInputOption=RAW&alt=
json returned "Invalid value at 'data.values' (type.googleapis.com/google.protobuf.ListValue), "OK"". Details: "[{'@type': 'type.googleapis.com/google.rpc.BadRequest', 'fieldViolations': [{'f
ield': 'data.values', 'description': 'Invalid value at \'data.values\' (type.googleapis.com/google.protobuf.ListValue), "OK"'}]}]">
错误在这一行,
value_range_body = {'values': values,
'majorDimension' : 'COLUMNS'}
尝试了不同的“配置”不知道如何修复它,它看起来不错。
提前致谢!
解决方案
这个改装怎么样?
在这种情况下,请使用二维数组values
。我认为您的错误消息的原因是由于这个。所以请修改如下并再次测试。
从:
values = ['OK']
至:
values = [['OK']]
参考:
推荐阅读
- ios - 当手机进入睡眠状态时,颤振热重载停止工作
- java - Utenti 未映射
- mongodb - 如何创建在另一个文件更新中隐式更新的派生 mongodb 字段?
- laravel - 如何将blade.php页面链接到laravel中的主页选项?
- javascript - 如何使图像看起来可以移动和旋转?
- c++11 - 如何让 SFINAE 检查不那么冗长?
- django - 手动运行预定的 zappa 函数
- python - 如何根据熊猫数据框中的多列按元素分组,并将每组的元素数量保存在另一列中?
- mysql - 从 RedShift 转换到 MySQL
- laravel - 如何从给定定义模型的关系名称中检索模型名称