如何在 gspread 中使用 batch_update 插入行和更改单元格样式?

How to insert row and change cell styles using batch_update in gspread?

我正在使用 gspreadgspread_formatting 更新我在 Google 中的工作表。我的一些代码库已被改写为使用 batch_update,因为我在另一个答案中找到了一些代码示例,我可以将其用作参考。但是,我似乎无法转换其他两个操作。这是我的代码:

import gspread

from gspread_formatting import *
from oauth2client.service_account import ServiceAccountCredentials

def operate():
    scope = [
        'https://spreadsheets.google.com/feeds',
        'https://www.googleapis.com/auth/drive'
    ]
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        'creds.json',
        scope
    )
    gc = gspread.authorize(credentials)

    sh = gc.open('My spreadsheet')
    ws = sh.sheet1
    sheet_id = ws._properties['sheetId']

    # Setting the column sizes
    body = {
        'requests': [
            {
                'updateDimensionProperties': {
                    'range': {
                        'sheetId': sheet_id,
                        'dimension': 'COLUMNS',
                        'startIndex': 0,
                        'endIndex': 10
                    },
                    'properties': {
                        'pixelSize': 150
                    },
                    'fields': 'pixelSize'
                }
            },
            {
                'updateDimensionProperties': {
                    'range': {
                        'sheetId': sheet_id,
                        'dimension': 'COLUMNS',
                        'startIndex': 4,
                        'endIndex': 6
                    },
                    'properties': {
                        'pixelSize': 250
                    },
                    'fields': 'pixelSize'
                }
            }
        ]
    }
    res = sh.batch_update(body)

    # Request 1
    ws.insert_row(['One', 'Two', 'Three'], 1)

    # Request 2
    format_cell_range(
        ws, 'A1:Z7',
        cellFormat(
            wrapStrategy='WRAP',
            verticalAlignment='MIDDLE',
            backgroundColor=color(0.886, 0.945, 0.988),
            textFormat=textFormat(
                foregroundColor=color(0, 0.129, 0.443),
                fontFamily='Roboto',
                bold=True
            )
        )
    )

所以,我想做的是以某种方式将请求 1 和请求 2 添加到 bulk_update 方法中。是否可以使用 bulk_update 插入一行并更改格式?如果是,我该怎么做?感谢您的帮助。

  • 您想在第一行插入新行。
  • 您想将 ['One', 'Two', 'Three'] 的值放入插入的行。
  • 你想使用gspread的batch_update()方法将下面的单元格格式设置为"A1:Z7"的范围

    wrapStrategy='WRAP',
    verticalAlignment='MIDDLE',
    backgroundColor=gsf.color(0.886, 0.945, 0.988),
    textFormat=gsf.textFormat(
        foregroundColor=gsf.color(0, 0.129, 0.443),
        fontFamily='Roboto',
        bold=True
    )
    
  • 您想通过 python.

    使用 gspread 来实现此目的
    • 您的目标是将以下脚本转换为 batch_update()

      # Request 1
      ws.insert_row(['One', 'Two', 'Three'], 1)
      
      # Request 2
      format_cell_range(
          ws, 'A1:Z7',
          cellFormat(
              wrapStrategy='WRAP',
              verticalAlignment='MIDDLE',
              backgroundColor=color(0.886, 0.945, 0.988),
              textFormat=textFormat(
                  foregroundColor=color(0, 0.129, 0.443),
                  fontFamily='Roboto',
                  bold=True
              )
          )
      )
      
  • 您已经能够使用表格获取和放置电子表格的值 API。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

流量:

本例中batch_update()的请求体的流程如下

  1. 将新行插入第 1 行 insertDimension
  2. ['One', 'Two', 'Three'] 的值放入由 updateCells 插入的行。
  3. 通过repeatCell将单元格格式设置为"A1:Z7"的范围。

修改后的脚本:

spreadsheetId = "###"  # Please set the Spreadsheet ID.
sheetName = "###"  # Please set the sheet name.

sh = gc.open_by_key(spreadsheetId)
ws = sh.worksheet(sheetName)
sheetId = ws._properties['sheetId']
requests = {
    "requests": [
        {
            "insertDimension": {
                "range": {
                    "sheetId": sheetId,
                    "startIndex": 0,
                    "dimension": "ROWS",
                    "endIndex": 1
                }
            }
        },
        {
            "updateCells": {
                "range": {
                    "sheetId": sheetId,
                    "startRowIndex": 0,
                    "endRowIndex": 1
                },
                "rows": [
                    {
                        "values": [
                            {
                                "userEnteredValue": {
                                    "stringValue": "One"
                                }
                            },
                            {
                                "userEnteredValue": {
                                    "stringValue": "Two"
                                }
                            },
                            {
                                "userEnteredValue": {
                                    "stringValue": "Three"
                                }
                            }
                        ]
                    }
                ],
                "fields": "userEnteredValue"
            }
        },
        {
            "repeatCell": {
                "range": {
                    "sheetId": sheetId,
                    "startRowIndex": 0,
                    "endRowIndex": 7,
                    "startColumnIndex": 0,
                    "endColumnIndex": 26
                },
                "cell": {
                    "userEnteredFormat": {
                        "wrapStrategy": "WRAP",
                        "verticalAlignment": "MIDDLE",
                        "backgroundColor": {
                            "red": 0.886,
                            "green": 0.945,
                            "blue": 0.988
                        },
                        "textFormat": {
                            "foregroundColor": {
                                "red": 0,
                                "green": 0.129,
                                "blue": 0.443
                            },
                            "fontFamily": "Roboto",
                            "bold": True
                        }
                    }
                },
                "fields": "userEnteredFormat"
            }
        }
    ]
}
res = sh.batch_update(requests)

注:

  • 我理解 bulk_updatebatch_update

参考文献:

如果我误解了您的问题而这不是您想要的结果,我深表歉意。