@TheDudeArthur

Как ссылаться на предыдущий лист через скрипт?

Доброго времени суток! Необходимо в google sheets автоматически брать данные из предыдущего листа и подставлять в формулу. В поисках нашел решение, но оно работает только, если функцию разместить в отличной от имени ячейки, откуда получена информации с предыдущего листа. К примеру беру данные из предыдущего листа из ячейки J5 и вызываю функцию на текущем листе в ячейке J5 - выскакивает ошибка, что цикличные ссылки. Подскажите пожалуйста Как можно решить проблему?

Сама функция:
function getListPrev(range) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const index = sheet.getIndex();
  
  const formula = sheet.getActiveRange().getFormula();
  range = formula.match(/getListPrev\(([^\)]*?)\)/i)[1].trim();
  
  const sheet_prev = (ss.getSheets()[index - 2] || null);
  
  if (!sheet_prev)
    throw new Error('Нет предыдущего листа!');
  
  return sheet_prev
  .getRange(range)
  .getValues();
}

Вызов функции в аналогичной по расположению ячейке (J5):
64be679ce10ef633518988.png

Вызов функции в другой ячейки (вызов в ячейке B20, получение данных из ячейки B1):
64be67e88ff16371855773.png
  • Вопрос задан
  • 175 просмотров
Решения вопроса 1
ProgrammerForever
@ProgrammerForever Куратор тега Google Apps Script
Учитель, автоэлектрик, программист, музыкант
Передавайте range как строку
function getListPrev(rangeName) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const index = sheet.getIndex();
  
  const sheet_prev = (ss.getSheets()[index - 2] || null);
  
  if (!sheet_prev)
    throw new Error('Нет предыдущего листа!');
  
  return sheet_prev
  .getRange(rangeName)
  .getValues();

Или попробуйте включить итеративные вычисления
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы