gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:35:07 27 4
gpt4 key购买 nike

我正在使用 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'] 的值放入到插入的行。
  • 你想使用batch_update()的方法将下面的单元格格式设置为“A1:Z7”的范围的 gspread。

    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
    )
  • 您想使用 gspread 和 python 来实现这一点。

    • 您的目标是将以下脚本转换为 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
      )
      )
      )
  • 您已经能够使用 Sheets API 为电子表格获取和放置值。

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

流程:

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

  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 .

引用资料:

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

关于python - 如何在 gspread 中使用 batch_update 插入行和更改单元格样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59828685/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com