Можно ли заполнить весь столбец формулой Excel, как в графическом интерфейсе? #gspread

#python #excel #google-sheets #google-sheets-api #gspread

#python #excel #google-sheets #google-sheets-api #gspread

Вопрос:

Возможно ли в библиотеке gspread заполнить весь столбец формулой Excel, как в графическом интерфейсе, не просматривая каждую строку?

В настоящее время я использую метод, приведенный ниже:

 def _update_formula(sheet):
     for i in range(2, 100):
         sheet.update_acell(f'AL{i}', f'=if(B{i}=B{i 1},1,0)')
 

Возможно ли, например, добавить 1 строку и скопировать формулу в остальные строки, как в графическом интерфейсе. У вас есть какие-либо идеи, как его оптимизировать?

Ответ №1:

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите поместить формулу =if(B{i}=B{i 1},1,0) во все ячейки в определенном столбце.
  • Вы хотите добиться этого с помощью gspread для python.

В вашем скрипте вы используете формулу '=if(B{i}=B{i 1},1,0' . Но в данном случае это может быть '=if(B{i}=B{i 1},1,0)' . В этом случае, как насчет следующего модифицированного скрипта? В этой модификации формула вводится с использованием RepeatCellRequest метода batchUpdate .

Модифицированный скрипт:

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

spreadsheet = client.open_by_key(spreadsheetId) # or client.open("###Spreadsheet title###")
sheet = spreadsheet.worksheet(sheetName)
requests = {
    "repeatCell": {
        "cell": {
            "userEnteredValue": {
                "formulaValue": "=if(B1=B2,1,0)"
            }
        },
        "range": {
            "sheetId": sheet.id,
            "startColumnIndex": 2,
            "endColumnIndex": 3,
            "startRowIndex": 1
        },
        "fields": "userEnteredValue.formulaValue"
    }
}
res = spreadsheet.batch_update({"requests": [requests]})
 
  • "startColumnIndex": 2 и "endColumnIndex": 3 of range означает столбец «C».
  • "startRowIndex": 1 of range и no endRowIndex означает, что формула помещается из строки 2 в конец строки.
  • Что касается сетки, вы можете увидеть это в официальном документе.

Ссылки: