如何使用 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}}}]
      

参考: