Google 工作表 API for Python:复制工作表时图表为空
Google Sheets API for Python: Empty charts when duplicating a worksheet
假设我有两个结构几乎相同的电子表格:
电子表格 A:
[Sheet1(图表和数据摘要)][Sheet2(数据)][Sheet3(数据)]...
电子表格 B:
[Sheet1(空)][Sheet2(数据)][Sheet3(数据)]...
A.Sheet1 包含手动创建的图表以及来自 A.Sheet2 和 A.Sheet3 的汇总数据。
电子表格 B 与电子表格 A 具有相同的工作表顺序和工作表名称。任务是将 Sheet1 从 A 复制到 B,以便所有图表和公式都应映射到相同工作表 B 的相应工作表中的数据名字.
所以我使用以下代码将整个 Sheet1 从 A 复制到 B:
def duplicate_worksheet(from_spreadsheet_id,
sheet_id,
to_spreadsheet_id,
credentials,
title=None):
service = discovery.build('sheets', 'v4', credentials=credentials)
copy_sheet_to_another_spreadsheet_request_body = {
'destination_spreadsheet_id': to_spreadsheet_id
}
request = service.spreadsheets().sheets().copyTo(spreadsheetId=from_spreadsheet_id,
sheetId=sheet_id,
body=copy_sheet_to_another_spreadsheet_request_body)
response = request.execute()
if title:
new_sheet_id = response['sheetId']
new_title = title
rename_worksheet(to_spreadsheet_id, new_sheet_id, new_title, credentials)
复制后,B.Sheet1如下所示:
在这里我们可以看到聚合表已成功复制,但有 2 个图表为空(相反,显示 No data
消息])。电子表格本身缺少所有指定的图表数据范围和链接,它们应该在从 A 复制后仍然存在。所以我的问题是如何 "deepcopy" 工作表并保留所有图表数据和链接? (当然以防万一 如果可以使用 Google API)
图表被复制为空,由于 Method: spreadsheets.sheets.copyTo 端点仅复制 一个 sheet 到另一个价差 sheet,因此如果一个图表是使用另一个 sheet 的数据构建的,它将丢失它。
作为解决方法,您可以使用原始图表的属性编辑 the empty chart's properties,这样它看起来就像是您想要的直接副本。
您将需要使用 Method: spreadsheets.batchUpdate 端点。在 Python 中,您的请求将如下所示:
body = {
'requests': requests
}
response = service.spreadsheets().batchUpdate(
spreadsheetId=spreadsheet_id,
body=body).execute()
假设我有两个结构几乎相同的电子表格:
电子表格 A: [Sheet1(图表和数据摘要)][Sheet2(数据)][Sheet3(数据)]...
电子表格 B: [Sheet1(空)][Sheet2(数据)][Sheet3(数据)]...
A.Sheet1 包含手动创建的图表以及来自 A.Sheet2 和 A.Sheet3 的汇总数据。
电子表格 B 与电子表格 A 具有相同的工作表顺序和工作表名称。任务是将 Sheet1 从 A 复制到 B,以便所有图表和公式都应映射到相同工作表 B 的相应工作表中的数据名字.
所以我使用以下代码将整个 Sheet1 从 A 复制到 B:
def duplicate_worksheet(from_spreadsheet_id,
sheet_id,
to_spreadsheet_id,
credentials,
title=None):
service = discovery.build('sheets', 'v4', credentials=credentials)
copy_sheet_to_another_spreadsheet_request_body = {
'destination_spreadsheet_id': to_spreadsheet_id
}
request = service.spreadsheets().sheets().copyTo(spreadsheetId=from_spreadsheet_id,
sheetId=sheet_id,
body=copy_sheet_to_another_spreadsheet_request_body)
response = request.execute()
if title:
new_sheet_id = response['sheetId']
new_title = title
rename_worksheet(to_spreadsheet_id, new_sheet_id, new_title, credentials)
复制后,B.Sheet1如下所示:
在这里我们可以看到聚合表已成功复制,但有 2 个图表为空(相反,显示 No data
消息])。电子表格本身缺少所有指定的图表数据范围和链接,它们应该在从 A 复制后仍然存在。所以我的问题是如何 "deepcopy" 工作表并保留所有图表数据和链接? (当然以防万一 如果可以使用 Google API)
图表被复制为空,由于 Method: spreadsheets.sheets.copyTo 端点仅复制 一个 sheet 到另一个价差 sheet,因此如果一个图表是使用另一个 sheet 的数据构建的,它将丢失它。
作为解决方法,您可以使用原始图表的属性编辑 the empty chart's properties,这样它看起来就像是您想要的直接副本。
您将需要使用 Method: spreadsheets.batchUpdate 端点。在 Python 中,您的请求将如下所示:
body = {
'requests': requests
}
response = service.spreadsheets().batchUpdate(
spreadsheetId=spreadsheet_id,
body=body).execute()