Вопрос или проблема
Пример таблицы:
https://docs.google.com/spreadsheets/d/1tDdfDHYbYmsiO0Dzok2YMR_HyLf0QPbdx01_goofzcs/edit?gid=0#gid=0
Следующий скрипт нуждается в корректировке, чтобы формулы могли быть скопированы обратно в переменные ячейки B4, B6:B12, B14 и J14 после выполнения события. Я могу сохранить формулы в колонке Z, например.
function menuItem1() {
var ss = SpreadsheetApp.getActive();
var srcSheet = ss.getSheetByName("Sheet1");
var dstSheet = ss.getSheetByName("dstSheet");
var data_range1 = srcSheet.getRange('U2:AD2');
var data_data1 = data_range1.getValues();
var data_clean1 = data_data1.filter(function (r) {return r[0]});
var B4 = srcSheet.getRange('B4');
var B6 = srcSheet.getRange('B6:B12');
var B14 = srcSheet.getRange('B14');
var J14 = srcSheet.getRange('J14');
var lr1 = dstSheet.getLastRow();
dstSheet.getRange(lr1+1, 1,data_clean1.length,10).setValues(data_clean1);
B4.clearContent();
B6.clearContent();
B14.clearContent();
J14.clearContent();
}
Пожалуйста, посмотрите.
С наилучшими пожеланиями
manc
Ответ или решение
Чтобы корректно восстановить формулы в ячейках B4, B6:B12, B14 и J14 после выполнения события, необходимо внести изменения в ваш скрипт Google Apps Script. Формулы могут быть временно сохранены в столбце Z в качестве промежуточных значений, что позволит легко их восстановить после очистки.
Вот улучшенная версия вашего скрипта с необходимыми корректировками:
function menuItem1() {
var ss = SpreadsheetApp.getActive();
var srcSheet = ss.getSheetByName("Sheet1");
var dstSheet = ss.getSheetByName("dstSheet");
// Сохранение формул в столбце Z
var formulas = [
srcSheet.getRange('B4').getFormula(),
srcSheet.getRange('B6:B12').getFormulas(),
srcSheet.getRange('B14').getFormula(),
srcSheet.getRange('J14').getFormula()
];
var data_range1 = srcSheet.getRange('U2:AD2');
var data_data1 = data_range1.getValues();
var data_clean1 = data_data1.filter(function (r) { return r[0]; });
var lr1 = dstSheet.getLastRow();
dstSheet.getRange(lr1 + 1, 1, data_clean1.length, 10).setValues(data_clean1);
// Очистка контента в целевых ячейках
srcSheet.getRange('B4').clearContent();
srcSheet.getRange('B6:B12').clearContent();
srcSheet.getRange('B14').clearContent();
srcSheet.getRange('J14').clearContent();
// Восстановление формул из сохраненных значений
srcSheet.getRange('B4').setFormula(formulas[0]);
srcSheet.getRange('B6:B12').setFormulas(formulas[1]);
srcSheet.getRange('B14').setFormula(formulas[2]);
srcSheet.getRange('J14').setFormula(formulas[3]);
}
Объяснение изменений:
-
Сохранение формул:
В начале функции мы извлекаем текущие формулы из целевых ячеек и сохраняем их в массивformulas
. Это позволяет нам восстановить их позже, не потеряв логику скрипта. -
Очистка контента:
Строки, отвечающие за очистку контента в указанных ячейках, остались без изменений. -
Восстановление формул:
В конце скрипта мы устанавливаем ранее сохраненные формулы обратно в нужные ячейки. Это гарантирует, что после выполнения скрипта формулы будут снова доступны в указанных ячейках.
Такое решение позволяет поддерживать работоспособность формул, не теряя их во время выполнения необходимых операций с данными. Ваша программа теперь полностью готова к работе с формулами и обеспечит сохранность необходимой информации.
Если у вас возникнут вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться.