#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
ofrange
означает столбец «C»."startRowIndex": 1
ofrange
и noendRowIndex
означает, что формула помещается из строки 2 в конец строки.- Что касается сетки, вы можете увидеть это в официальном документе.