【问题标题】:How do I split all merged cells for a specific sheet within a Google Spreadsheet using Python?如何使用 Python 拆分 Google 电子表格中特定工作表的所有合并单元格?
【发布时间】:2020-10-12 14:54:46
【问题描述】:

我正在使用 Google sheet API 并定义了以下函数:

def service():
    secret_id_gsuite_token = 'my_token' # AWS Secret with token
    gsheet = GSheets(secret_id_gsuite_token)
    return gsheet

使用 pandas 数据框中的信息更新工作表:

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 函数使用了 google sheet api 的 batchUpdate() 方法。

最后这是清除工作表的功能:

def clear_sheet(gsheet, spreadsheetId, sheeId):
    clear_request = [{"updateCells": {"range": {"sheetId": sheeId},
                                      "fields": "*"}}]

    gsheet.batch_update(spreadsheetId, clear_request)

问题是最后一个函数没有清除合并的单元格,我想取消合并所有合并的单元格以使工作表再次完全干净,但是我在网上找到的选项似乎都不适合我的代码...

【问题讨论】:

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


    【解决方案1】:

    我相信你的目标和情况如下。

    • I want to unmerge all merged cells in order to have the sheet totally clean again 中,您希望使用 Sheets API 取消合并工作表中的单元格。
    • 您想使用 googleapis for python 来实现这一点。
    • 您已经能够使用 Sheets API 为 Google 电子表格获取和输入值。

    在这种情况下,我建议使用 Sheets API 中 batchUpdate 方法的 UnmergeCellsRequest。

    请求正文如下。

    {
      "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}}}]
        

    参考:

    【讨论】:

    • 我实际上必须提出这个请求: [{"unmergeCells": {"range": {"sheetId": sheeId, "startRowIndex": 0, "endRowIndex": 100, "startColumnIndex": 0, "endColumnIndex": 100}}}] 但它有效!非常感谢!
    • @Lucy_in_the_sky_with_diamonds 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    相关资源
    最近更新 更多