Вызовите формулу, НЕ значение из другой ячейки и выполните формулу в новой ячейке - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь найти способ вызвать формулу, использованную в B3 (в настоящее время это простая формула AVERAGE), в G3 и использовать ее там.Зеленые ячейки - это статические значения, используемые для тестирования.Если я сделаю «= B3» в G3, я получу значение из B3, а не то, что я хочу.Я хочу в среднем F3 и H3.В основном, как большой диапазон, обновляемое копирование / вставка или FormulaArray.Если это имеет смысл.Поскольку лист, на котором я буду реализовывать это, будет содержать много примеров формул, я хотел бы иметь возможность изменять их в одном месте и обновлять автоматически, а не копировать / вставлять.Я также буду называть формулы из другого документа.Поэтому я бы хотел метод, с помощью которого я мог бы изменить B3 на формула MULTIPLY, и он автоматически применял бы это изменение к ячейке в столбце G, ссылаясь, конечно, на относительные ячейки.Это вообще возможно?

Я нашел вопрос, задающий что-то похожее на это:

Как получить формулу из ячейки вместо значения?

Но из двух работоспособных решений, CELLFORMULA Рубена удалось вывести функцию в виде строки (как в G5), что близко!А Луис вообще не работал на меня, хотя казалось, что он пытался сделать то, что я хочу.Я возился с этим, но я не мог заставить его работать независимо от того, что я делал.Ни одно из других предложений не сработало вообще.

Вот тестовый лист, который я сделал, чтобы проиллюстрировать то, что я ищу:

Лист теста формулы вызова

Дополнительно:

Как я уже сказал, код Рубена работал идеально так, как кажется, и предполагал, и Луис заявил, что он внес некоторые собственные корректировки, чтобы заставить формулу выполняться в новой ячейке.Но копирование и вставка кода Луиса привели только к ошибкам, и попытка его подстройки была безнадежной, поскольку я только недавно начал заниматься сценариями и кодированием в целом.Я просто приложил все усилия, чтобы сравнить и сопоставить оригинальный код Рубена с измененным кодом Луиса и выявить любые различия, которые могли быть ошибками.Примерно так:

function CELLFORMULA(reference) {
  var ss = SpreadsheetApp;
  var sheet = ss.getActiveSheet();
  var formula = ss.getActiveRange().getFormula();
  var re = /cellformula\((.*)\);/g;
  var args = re.exec(formula);
  try {
    var range = sheet.getRange(args[1]);
  }
  catch(e) {
    throw new Error(args[1] + ' is not a valid range');
  }
  return range.getFormula();
}

Казалось, что, возможно, Луис не вызывал переменные, как Рубен?Я не уверен.Но фундаментальное различие между этими двумя кодами выглядит следующим образом:

var args = formula.match(/=\w+\((.*)\)/i);

в сравнении с тем, что есть у Луиса (без изменений):

 re = /cellformula\((.*)\);/g;
  args = re.exec(formula);

Мне кажется, что re.exec(формула) был частью кода Луиса, который должен привести к выполнению формулы, а не просто помещать ее в ячейку в виде строки, но я, конечно, могу ошибаться.

Как я уже сказал, я новичок в этом ичасти "(/=\w+((.))/i)" и "/cellformula((.));/g" полностью над моей головой.Я пытался найти этот синтаксис, чтобы лучше понять его, но безуспешно.

1 Ответ

0 голосов
/ 06 декабря 2018

Как я уже сказал, я новичок в этом, и части "(/=\w+((.))/i)" и "/cellformula((.));/g" полностью поверх моейголова.Я пытался найти этот синтаксис, чтобы лучше понять его, но безуспешно.

Это регулярные выражения .


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

Для простоты следующий код будет очень специфичным: если формула на B3 измененатогда формула в G7 будет обновлена.

function updateFormula(e) {
  var formula = e.range.getFormulaR1C1();
  if(e.range.rowStart == 3 && e.range.columnStart == 2 && formula != ""){
    var sheet = e.range.getSheet();
    var target = sheet.getRange('G7');
    target.setFormulaR1C1(formula);
  }
}

Не забудьте создать устанавливаемый триггер при редактировании, который вызывает вышеуказанную функцию, и если вы хотите проверить это из проверки скрипта редактора Как я могу проверитьтриггерная функция в ГАЗЕ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...