Обновить формат нескольких ячеек с помощью запроса API updateCells

1

Я пытаюсь центрировать выравнивание диапазона ячеек, но только первая ячейка диапазона обновляется с указанным форматом.

Вот мой код:

align = 'CENTER'
data={
      "requests": [
        {
          "updateCells": {
            "rows": [
              {
                "values": [
                  {
                    "userEnteredFormat": {
                      "horizontalAlignment": align,
                      "textFormat":  { 
                        "fontFamily": fontFamily,
                        "fontSize":  fontSize
                      }
                    }
                  }
                ]
              }
            ],
            "range": {
              "sheetId": sheetId,
              "startRowIndex": startRowIndex,
              "endRowIndex": endRowIndex,
              "startColumnIndex": startColumnIndex,
              "endColumnIndex": endColumnIndex
            },
            "fields": "userEnteredFormat"
          }
        }
      ]
    }

Если я регистрирую значения - то есть print (startRowIndex, endRowIndex, startColumnIndex, endColumnIndex) - они верны (например, 0 1 27 30), но только первая ячейка обновляется до формата - не весь диапазон.

Что здесь происходит? Как применить указанный формат во всем диапазоне?

Теги:
google-sheets-api
google-api-python-client

2 ответа

2
Лучший ответ

Вы хотите обновить "AB1: AD1" ({startRowIndex: 0, endRowIndex: 1, startColumnIndex: 27, endColumnIndex: 30}). Если мое понимание правильное, как насчет этой модификации?

Измененные точки:

  • Когда обновляется 3 столбца, значения также должны обновляться. В вашем случае вы хотите обновить 3 столбца. Поэтому требуется создать как {values: [{userEnteredFormat: ###}, {userEnteredFormat: ###}, {userEnteredFormat: ###}]}.

Измененный запрос:

{
  "requests": 
  [
    {
      "updateCells": 
      {
        "rows": 
        [
          {
            "values": 
            [
              {
                "userEnteredFormat": 
                {
                  "horizontalAlignment": align ,   #'CENTER','LEFT','RIGHT',
                  "textFormat": 
                  {
                    "fontFamily": fontFamily,
                    "fontSize": fontSize
                  }
                }
              },
              {
                "userEnteredFormat": 
                {
                  "horizontalAlignment": align ,   #'CENTER','LEFT','RIGHT',
                  "textFormat": 
                  {
                    "fontFamily": fontFamily,
                    "fontSize": fontSize
                  }
                }
              },
              {
                "userEnteredFormat": 
                {
                  "horizontalAlignment": align ,   #'CENTER','LEFT','RIGHT',
                  "textFormat": 
                  {
                    "fontFamily": fontFamily,
                    "fontSize": fontSize
                  }
                }
              }
            ]
          }
        ],
        "range": 
        {
          "sheetId": sheetId,
          "startRowIndex": startRowIndex,
          "endRowIndex": endRowIndex,
          "startColumnIndex": startColumnIndex,
          "endColumnIndex": endColumnIndex
        },
        "fields": "userEnteredFormat",
      }
    }
  ]
}

Если я не понимаю ваш вопрос, скажите мне. Я хотел бы изменить его.

Редактировать:

Если вы хотите отразить формат для большого количества ячеек, вы можете использовать repeatCell. Тело запроса выглядит следующим образом. В этом примере все ячейки в диапазоне изменяются.

Измененный запрос:

{
  "requests": 
  [
    {
      "repeatCell": 
      {
        "cell": 
        {
          "userEnteredFormat": 
          {
            "horizontalAlignment": align ,   #'CENTER','LEFT','RIGHT',
            "textFormat":
             {
               "fontFamily": fontFamily,
               "fontSize": fontSize
             }
          }
        },
        "range": 
        {
          "sheetId": sheetId,
          "startRowIndex": startRowIndex,
          "endRowIndex": endRowIndex,
          "startColumnIndex": startColumnIndex,
          "endColumnIndex": endColumnIndex
        },
        "fields": "userEnteredFormat"
      }
    }
  ]
}

Ссылка:

  • 0
    действительно? этого не может быть Что делать, если я хочу обновить 1000 ячеек одновременно с тем же форматом? Я должен был бы положить в 1000 из этих значений? этого не может быть в чем смысл "диапазона" тогда?
  • 0
    @ Джейсон Мне очень жаль, я не заметил, что ты хочешь использовать такую ситуацию. Поэтому я обновил свой ответ. Не могли бы вы подтвердить это?
Показать ещё 7 комментариев
-1
import json

import gspread из импорта oauth2client.client SignedJwtAssertionCredentials

json_key = json.load(open ('creds.json')) # json учетные данные, которые вы загрузили ранее. = [' https://spreadsheets.google.com/feeds ']

credentials = SignedJwtAssertionCredentials (json_key ['client_email'], json_key ['private_key']. encode(), scope) # получать электронную почту и ключ от creds

file = gspread.authorize (учетные данные) # аутентифицировать с помощью Google sheet = file.open("MUO_Python_Sheet"). sheet1 # open sheet

If you are writing to an important sheet, you may wish to consider a safety cell. Store a value in a certain cell (I use "Dont delete this") and then read that cell first. If the contents have changed, then columns have been added or removed in your sheet, so dont proceed writing! Heres how that could be achieved:

if sheet.acell('B3') != 'SAFETY':
# something has changed in the sheet, DO NOT PROCEED
raise Exception("Oh My, I'm not ready for this.")

else: # продолжить с вашим письмом sheet.update_acell ('C2', 'Blue')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню