【问题标题】:Google Sheets API for Python: Empty charts when duplicating a worksheet适用于 Python 的 Google Sheets API:复制工作表时出现空图表
【发布时间】:2020-09-04 03:02:21
【问题描述】:

假设我有两个结构几乎相同的电子表格:

电子表格 A[Sheet1(图表和数据摘要)][Sheet2(数据)][Sheet3(数据)]...

电子表格 B[Sheet1()][Sheet2 (Data)][Sheet3(Data)]...

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 复制后仍然存在。所以我的问题是如何“深度复制”工作表并保留所有图表数据和链接? (当然,如果可以使用 Google API)

【问题讨论】:

    标签: python api google-sheets google-sheets-api worksheet


    【解决方案1】:

    由于Method: spreadsheets.sheets.copyTo 端点仅将一个工作表复制到另一个电子表格,因此图表被复制为空,因此如果一个图表是使用来自另一个电子表格的数据构建的表,它会丢失它。

    作为一种解决方法,您可以使用原始图表的属性编辑the empty chart's properties,这样它看起来就像是您想要的它的直接副本。

    您将需要使用Method: spreadsheets.batchUpdate 端点。在 Python 中,您的请求将如下所示:

    body = {
        'requests': requests
    }
    response = service.spreadsheets().batchUpdate(
        spreadsheetId=spreadsheet_id,
        body=body).execute()
    

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 2017-06-18
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多