Google Sheets python api - 如何在保留 sheet 格式的同时将值写入 sheet?
Google Sheets python api - how to write values to sheet while preserving sheet formatting?
当我使用 spreadsheets.values.update 将数据写入 sheet 时,覆盖单元格中现有的 sheet 格式被清除。
request = sheet.values().update(spreadsheetId=spreadsheet_ID, range="Sheet1!A2", valueInputOption="USER_ENTERED", body={"values": retrievedData}).execute()
有没有办法保留 sheet 的格式,并且基本上只将值写入值?
显然我可以将值写入其他一些工作sheet,然后在我想要的工作中引用这些值sheet,但是如果我可以直接完成 objective,那将更可取。
您可以尝试将 valueInputOption
从 "USER_ENTERED"
更改为 "RAW"
request = sheet.values().update(spreadsheetId=spreadsheet_ID, range="Sheet1!A2", valueInputOption="RAW", body={"values": retrievedData}).execute()
当我看到你的问题时,我认为你的情况可能与有关(但是,这个帖子是针对Node.js的)。如果我的理解是正确的,针对你的问题,我提出如下修改。
在这个修改中,首先,检索sheet中所有单元格的单元格格式。在输入 retrievedData
的值后,检索到的单元格格式将反映到 sheet。通过这种方式,将保留放置值之前的单元格格式。当这反映到您的脚本中时,它会变成如下。
修改后的脚本:
发件人:
request = sheet.values().update(spreadsheetId=spreadsheet_ID, range="Sheet1!A2", valueInputOption="USER_ENTERED", body={"values": retrievedData}).execute()
收件人:
spreadsheet_ID = "###" # Please set the Spreadsheet ID.
sheetName = 'Sheet1' # Please set the sheet name. In your script, it's "Sheet1".
retrievedData = [[,,,]] # Please set your value.
obj = sheet.get(spreadsheetId=spreadsheet_ID, ranges=sheetName, fields='sheets(data(rowData(values(userEnteredFormat))),properties(sheetId))').execute()
request = sheet.values().update(spreadsheetId=spreadsheet_ID, range=sheetName + "!A2", valueInputOption="USER_ENTERED", body={"values": retrievedData}).execute()
body = {
"requests": [
{
"updateCells": {
"rows": obj['sheets'][0]['data'][0]['rowData'],
"range": {"sheetId": obj['sheets'][0]['properties']['sheetId']},
"fields": "userEnteredFormat"
}
}
]
}
resp = sheet.batchUpdate(spreadsheetId=spreadsheet_ID, body=body).execute()
参考文献:
当我使用 spreadsheets.values.update 将数据写入 sheet 时,覆盖单元格中现有的 sheet 格式被清除。
request = sheet.values().update(spreadsheetId=spreadsheet_ID, range="Sheet1!A2", valueInputOption="USER_ENTERED", body={"values": retrievedData}).execute()
有没有办法保留 sheet 的格式,并且基本上只将值写入值?
显然我可以将值写入其他一些工作sheet,然后在我想要的工作中引用这些值sheet,但是如果我可以直接完成 objective,那将更可取。
您可以尝试将 valueInputOption
从 "USER_ENTERED"
更改为 "RAW"
request = sheet.values().update(spreadsheetId=spreadsheet_ID, range="Sheet1!A2", valueInputOption="RAW", body={"values": retrievedData}).execute()
当我看到你的问题时,我认为你的情况可能与
在这个修改中,首先,检索sheet中所有单元格的单元格格式。在输入 retrievedData
的值后,检索到的单元格格式将反映到 sheet。通过这种方式,将保留放置值之前的单元格格式。当这反映到您的脚本中时,它会变成如下。
修改后的脚本:
发件人:
request = sheet.values().update(spreadsheetId=spreadsheet_ID, range="Sheet1!A2", valueInputOption="USER_ENTERED", body={"values": retrievedData}).execute()
收件人:
spreadsheet_ID = "###" # Please set the Spreadsheet ID.
sheetName = 'Sheet1' # Please set the sheet name. In your script, it's "Sheet1".
retrievedData = [[,,,]] # Please set your value.
obj = sheet.get(spreadsheetId=spreadsheet_ID, ranges=sheetName, fields='sheets(data(rowData(values(userEnteredFormat))),properties(sheetId))').execute()
request = sheet.values().update(spreadsheetId=spreadsheet_ID, range=sheetName + "!A2", valueInputOption="USER_ENTERED", body={"values": retrievedData}).execute()
body = {
"requests": [
{
"updateCells": {
"rows": obj['sheets'][0]['data'][0]['rowData'],
"range": {"sheetId": obj['sheets'][0]['properties']['sheetId']},
"fields": "userEnteredFormat"
}
}
]
}
resp = sheet.batchUpdate(spreadsheetId=spreadsheet_ID, body=body).execute()