Пытаюсь настроить скрипт для копирования формул обратно в ячейки после выполнения события.

Вопрос или проблема

Пример таблицы:
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]);
}

Объяснение изменений:

  1. Сохранение формул:
    В начале функции мы извлекаем текущие формулы из целевых ячеек и сохраняем их в массив formulas. Это позволяет нам восстановить их позже, не потеряв логику скрипта.

  2. Очистка контента:
    Строки, отвечающие за очистку контента в указанных ячейках, остались без изменений.

  3. Восстановление формул:
    В конце скрипта мы устанавливаем ранее сохраненные формулы обратно в нужные ячейки. Это гарантирует, что после выполнения скрипта формулы будут снова доступны в указанных ячейках.

Такое решение позволяет поддерживать работоспособность формул, не теряя их во время выполнения необходимых операций с данными. Ваша программа теперь полностью готова к работе с формулами и обеспечит сохранность необходимой информации.

Если у вас возникнут вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...