Python gspread 格式设置 - 将单元格范围的垂直对齐设置为中间

问题描述 投票:0回答:1

我正在尝试格式化谷歌工作表的一些单元格。 由于我在第一行的某些单元格中使用新行字符,因此我注意到垂直对齐方式自动设置为底部,而我希望第一行中的一系列单元格具有居中垂直对齐方式。

我从以下代码块中省略了相当多的列,因为我有超过 25 列:

import gspread
from google.oauth2.service_account import Credentials

scopes = ["https://www.googleapis.com/auth/spreadsheets"]
creds = Credentials.from_service_account_file("credentials.json", scopes=scopes)
client = gspread.authorize(creds)

sheet_id = "url"
workbook = client.open_by_key(sheet_id)

new_worksheet_name = "template"

# check if new sheet exists already
if new_worksheet_name in worksheet_list:
    sheet = workbook.worksheet(new_worksheet_name)
else:
    sheet = workbook.add_worksheet(new_worksheet_name, rows=91, cols=30)

values = [
    ["Data\nYYYY/MM/DD", "Totale\ninizio giorno", "Totale\ndopo refresh", "Set giornaliero", "Serie\ngiornaliera"],
]

sheet.clear()

sheet.update(values, f"A1:Z{len(values)}")

sheet.format("A1:Z1", {"textFormat": {"bold": True}})

我尝试过(希望它的工作方式与粗体相同)

sheet.format("A1:Z1", {"verticalAlignment": {"MIDDLE": True}})
但我得到以下回溯:

  File "C:path", line 41, in <module>
    sheet.format("A1:Z1", {"verticalAlignment": {"MIDDLE": True}})
  File "C:path\.venv\Lib\site-packages\gspread\worksheet.py", line 1479, in format
    return self.batch_format(formats)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:path\.venv\Lib\site-packages\gspread\worksheet.py", line 1430, in batch_format
    return self.client.batch_update(self.spreadsheet_id, body)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:path\.venv\Lib\site-packages\gspread\http_client.py", line 134, in batch_update
    r = self.request("post", SPREADSHEET_BATCH_UPDATE_URL % id, json=body)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:path\.venv\Lib\site-packages\gspread\http_client.py", line 123, in request
    raise APIError(response)
gspread.exceptions.APIError: {'code': 400, 'message': "Invalid value at 'requests[0].repeat_cell.cell.user_entered_format' (vertical_alignment), Starting an object on a scalar field", 'status': 'INVALID_ARGUMENT', 'details': [{'@type': 'type.googleapis.com/google.rpc.BadRequest', 'fieldViolations': [{'field': 'requests[0].repeat_cell.cell.user_entered_format', 'description': "Invalid value at 'requests[0].repeat_cell.cell.user_entered_format' (vertical_alignment), Starting an object on a scalar field"}]}]}
python google-sheets gspread gspread-formatting
1个回答
0
投票

对于垂直对齐,您不使用布尔值。您应该使用指定对齐类型的字符串:

import gspread
from google.oauth2.service_account import Credentials
scopes = ["https://www.googleapis.com/auth/spreadsheets"]
creds = Credentials.from_service_account_file('your_credentials_file.json', scopes=scopes)
client = gspread.authorize(creds)
sheet_id = "your_sheet_id"
workbook = client.open_by_key(sheet_id)
new_worksheet_name = "template"
worksheet_list = [ws.title for ws in workbook.worksheets()]
if new_worksheet_name in worksheet_list:
    sheet = workbook.worksheet(new_worksheet_name)
else:
    sheet = workbook.add_worksheet(new_worksheet_name, rows=91, cols=30)
values = [["Data\nYYYY/MM.DD", "Totale\ninizio giorno", "Set giornaliero", "Serie\ngiornaliera"],]
sheet.clear()
sheet.update("A1:Z1", values)
sheet.format("A1:Z1", {"textFormat": {"bold": True}})
sheet.format("A1:Z1", {"verticalAlignment": "MIDDLE"})
© www.soinside.com 2019 - 2024. All rights reserved.