Когда я использую gspread для копирования формулы ячейки из (target_cell) в (target_cell + 1 строка), формула правильно передается, однако она все еще ссылается на данные из строки (target_cell). Мне нужно, чтобы ссылаться на данные новой строки. Аналогично тому, когда вы используете «перетаскивание» или копирование + Shift + выберите все подходящие ячейки + метод вставки в Excel / Google листов.
В настоящее время я могу использовать gspread для получения формулы из определенной ячейки, используя это: ([source] Как скопировать формулу из одного gsheet в другой, используя python? )
formula = sheet.acell("C3", value_render_option='FORMULA').value
print(formula)
Я хочу скопировать эту формулу (= B3 + A3) в строке выше, но ссылка A2 и B2 не указана. Пока я вижу только один способ обновить ячейку, но я могу манипулировать формулой между ними?
sheet.update_acell("C2", formula)
Вот весь код, использующий первый полученный мной ответ:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
client = gspread.authorize(creds)
#this portion is to ensure I can reach the target spreadsheet and manipulate the spreadsheet. It does work.
sheet = client.open("stocks").worksheet("sandbox")
input=sheet.find(r"start")
tgtrow=input.row
tgtcol=(input.col)
sheet.insert_row(["",""],tgtrow+1)
sheet.update_cell(tgtrow,tgtcol+4, "hi")
#running recomended code
spreadsheetId = "stocks"
sheetName = "sandbox"
client = gspread.authorize(creds)
ss = client.open_by_key(spreadsheetId)
sheetId = ss.worksheet(sheetName)._properties['sheetId']
body = {
"requests": [
{
"copyPaste": {
"source": {
"sheetId": sheetId,
"startRowIndex": 2,
"endRowIndex": 3,
"startColumnIndex": 2,
"endColumnIndex": 3
},
"destination": {
"sheetId": sheetId,
"startRowIndex": 1,
"endRowIndex": 2,
"startColumnIndex": 2,
"endColumnIndex": 3
},
"pasteType": "PASTE_FORMULA"
}
}
]
}
res = ss.batch_update(body)