如何使用 Python 在 Google Spreadsheet 中拆分特定 sheet 的所有合并单元格?
How do I split all merged cells for a specific sheet within a Google Spreadsheet using Python?
我正在使用 Google sheet API 并且我定义了以下函数:
def service():
secret_id_gsuite_token = 'my_token' # AWS Secret with token
gsheet = GSheets(secret_id_gsuite_token)
return gsheet
要使用 pandas 数据帧中存在的信息更新 sheet:
def df_to_googlesheet(gsheet, df, gsheetId, sheet_name):
output = gsheet.spreadsheets.values().update(
spreadsheetId = gsheetId,
valueInputOption = 'RAW',
range = sheet_name + '!A1',
body = dict(
majorDimension = 'ROWS',
values = df.T.reset_index().T.values.tolist())
).execute()
请求合并单元格以形成“块”:
def merge_cells_request(sheeId, start_row, end_row, start_col, end_col):
request = [{"mergeCells": { "range": { "sheetId": sheeId,
"startRowIndex": start_row,
"endRowIndex": end_row,
"startColumnIndex": start_col,
"endColumnIndex": end_col},
"mergeType": "MERGE_ALL"}}]
return request
我也有类似的功能来请求为单元格背景着色。我将所有请求放入 requests 列表并应用它们 运行:
gsheet.batch_update(gsheetId, requests)
这个batch_update函数使用batchUpdate()方法google sheets api.
最后这是清除sheet的函数:
def clear_sheet(gsheet, spreadsheetId, sheeId):
clear_request = [{"updateCells": {"range": {"sheetId": sheeId},
"fields": "*"}}]
gsheet.batch_update(spreadsheetId, clear_request)
问题是最后一个函数没有清除合并的单元格,我想取消合并所有合并的单元格,以便 sheet 再次完全干净,但是 none 我的选项在网上找到的似乎适合我的代码...
我相信你的目标和情况如下。
- 来自
I want to unmerge all merged cells in order to have the sheet totally clean again
,您想要使用工作表 API. 取消合并 sheet 中的单元格
- 您想使用 googleapis 实现此目的 python。
- 您已经能够使用 Sheets API.
获取和放置 Google Spreadsheet 的值
在这种情况下,我建议使用Sheets中batchUpdate方法的UnmergeCellsRequest API。
请求正文如下
{
"requests": [
{
"unmergeCells": {
"range": {
"sheetId": sheeId
}
}
}
]
}
虽然我不确定你的整个脚本,但从你下面的脚本来看
def clear_sheet(gsheet, spreadsheetId, sheeId):
clear_request = [{"updateCells": {"range": {"sheetId": sheeId},
"fields": "*"}}]
gsheet.batch_update(spreadsheetId, clear_request)
这样的话,gsheet.batch_update()
的请求可能是这样的。
[{"unmergeCells": {"range": {"sheetId": sheeId}}}]
参考:
我正在使用 Google sheet API 并且我定义了以下函数:
def service():
secret_id_gsuite_token = 'my_token' # AWS Secret with token
gsheet = GSheets(secret_id_gsuite_token)
return gsheet
要使用 pandas 数据帧中存在的信息更新 sheet:
def df_to_googlesheet(gsheet, df, gsheetId, sheet_name):
output = gsheet.spreadsheets.values().update(
spreadsheetId = gsheetId,
valueInputOption = 'RAW',
range = sheet_name + '!A1',
body = dict(
majorDimension = 'ROWS',
values = df.T.reset_index().T.values.tolist())
).execute()
请求合并单元格以形成“块”:
def merge_cells_request(sheeId, start_row, end_row, start_col, end_col):
request = [{"mergeCells": { "range": { "sheetId": sheeId,
"startRowIndex": start_row,
"endRowIndex": end_row,
"startColumnIndex": start_col,
"endColumnIndex": end_col},
"mergeType": "MERGE_ALL"}}]
return request
我也有类似的功能来请求为单元格背景着色。我将所有请求放入 requests 列表并应用它们 运行:
gsheet.batch_update(gsheetId, requests)
这个batch_update函数使用batchUpdate()方法google sheets api.
最后这是清除sheet的函数:
def clear_sheet(gsheet, spreadsheetId, sheeId):
clear_request = [{"updateCells": {"range": {"sheetId": sheeId},
"fields": "*"}}]
gsheet.batch_update(spreadsheetId, clear_request)
问题是最后一个函数没有清除合并的单元格,我想取消合并所有合并的单元格,以便 sheet 再次完全干净,但是 none 我的选项在网上找到的似乎适合我的代码...
我相信你的目标和情况如下。
- 来自
I want to unmerge all merged cells in order to have the sheet totally clean again
,您想要使用工作表 API. 取消合并 sheet 中的单元格
- 您想使用 googleapis 实现此目的 python。
- 您已经能够使用 Sheets API. 获取和放置 Google Spreadsheet 的值
在这种情况下,我建议使用Sheets中batchUpdate方法的UnmergeCellsRequest API。
请求正文如下
{
"requests": [
{
"unmergeCells": {
"range": {
"sheetId": sheeId
}
}
}
]
}
虽然我不确定你的整个脚本,但从你下面的脚本来看
def clear_sheet(gsheet, spreadsheetId, sheeId): clear_request = [{"updateCells": {"range": {"sheetId": sheeId}, "fields": "*"}}] gsheet.batch_update(spreadsheetId, clear_request)
这样的话,
gsheet.batch_update()
的请求可能是这样的。[{"unmergeCells": {"range": {"sheetId": sheeId}}}]