Как вставить формулы в Google Sheets именно методом batchUpdate
Цель кода следующая:
Скопировать формулы из одного диапозона, потом вернуть их же обратно.
Я НЕ могу делать это стандартной getRange().setFormulas()
Потому что диапозон слишком большой и гугл выдает ошибку.
Я ее обошел, используя Sheets.Spreadsheets.Values.batchUpdate
Но я получаю следующую ошибку при выполнении кода:
Exception: API call to sheets.spreadsheets.values.batchUpdate failed with error: Empty response
Я думаю это из-за того, что я пытаюсь передать в 'values' массив с полученный путем getFormulas()
Тк выше в программе точно такой же код, только с getValues() работает как надо.
Вот код:
var formulsRange = v3_seet.getRange(yStart, xStart, yEnd, xEnd)
var formuls = formulsRange.getFormulas()
Logger.log("FORMULS COPIED")
v3_seet.getRange(yStart, xStart, yEnd, xEnd).clear()
Logger.log("range ARE CLEARED")
var request = {
'valueInputOption': 'USER_ENTERED',
'data': [
{
'range': shets[0]+'!' + formulsRange.getA1Notation(),
'majorDimension': 'ROWS',
'values': formuls
}
]
};
Sheets.Spreadsheets.Values.batchUpdate(request, v3_sheetID);
Logger.log("FORMULAS RESTORED")
Подскажите как вставить формулы в диапазон именно batchUpdate'ом.
Ну и не обязательный вопрос: как копировать формулы опять же при помощи batchUpdate'а.
Ответы (1 шт):
Скорее всего, из-за пакетного изменения на стороне сервера очистка листа происходит после всех расчетов. Поэтому эту строку надо закомментировать.
Немного добавил методов и переопределил ваши переменные вне функции
const v3_seet = SpreadsheetApp.getActiveSheet();
const v3_sheetID = v3_seet.getParent().getId();
const shets = v3_seet.getParent().getSheets();
const [yStart, xStart, yEnd, xEnd] = [1, 1, 4, 4];
function userActionResetSheetToFormulas() {
const formulsRange = v3_seet.getRange(yStart, xStart, yEnd, xEnd);
const formuls = formulsRange.getFormulas();
console.log("FORMULS COPIED")
// v3_seet.getRange(yStart, xStart, yEnd, xEnd).clear();
console.log("range ARE CLEARED")
const request = {
'valueInputOption': 'USER_ENTERED',
'data': [
{
'range': shets[0].getName() + '!' + formulsRange.getA1Notation(),
'values': formuls
}
]
};
Sheets.Spreadsheets.Values.batchUpdate(request, v3_sheetID);
console.log("FORMULAS RESTORED")
}
