Преобразование строки в формулу в Google Spreadsheet

Я более 10 часов читал и пробовал разные варианты, но безуспешно.

У меня есть эта строка (на самом деле это строка, созданная другими формулами)

QUERY({IMPORTRANGE(A1;$D$1);IMPORTRANGE(A2;$D$1);IMPORTRANGE(A3;$D$1);IMPORTRANGE(A4;$D$1)};"select Col13, sum(Col1), sum(Col2), sum(Col3), sum(Col4), sum(Col5), sum(Col6), sum(Col7), sum(Col8), sum(Col9), sum(Col10), sum(Col11), sum(Col12) group by Col13";0)

И я хочу, чтобы это читалось как формула. Так, например, я пробую эту функцию:

function doConvert(formula) {
  // Strip leading "=" if there
  if (formula.charAt(0) === '=') formula = formula.substring(1);
  return eval(formula);
}

Но я получаю:

Ошибка / SyntaxError: Falta: detrás del ID de propiedad.

(На английском языке будет:: отсутствует после идентификатора собственности.

Любое другое решение было бы отличным.


comment
Что такое значения в A1 A2 A3 A4 и D1?   -  person user11982798    schedule 12.01.2020
comment
Пожалуйста, поделитесь копией своей таблицы и включите пример успешного результата.   -  person Tedinoz    schedule 12.01.2020


Ответы (2)


добавьте = в вашу сгенерированную строку и попробуйте вот так:

function onEdit() { 
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet_Name_Here');  
var src = sheet.getRange("A1");              // The cell which holds the formula
var str = src.getValue(); 
var cell = sheet.getRange("C5");             // The cell where you want the results to be in
cell.setFormula(str);              
}
person player0    schedule 12.01.2020
comment
Привет спасибо! Это сработало! Я только что отредактировал строку 2 с помощью: var sheet = SpreadsheetApp.getActiveSheet (); так что мне не нужно ссылаться на название листа. - person Gastón BA; 12.01.2020

Формулы Google Таблиц нельзя оценивать в коде сервера / клиента, только в пользовательском интерфейсе Google Таблиц.

Если вы хотите, чтобы ваша строка передавалась как формула в ячейку, используйте метод setFormula(formula) из диапазона классов

ПРИМЕЧАНИЕ: ставить знак равенства в формулу не нужно.

Пример

Предполагая, что строка формулы находится в A1 и что вы хотите поместить, это как формула в B1

function setFormula(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var source= sheet.getRange('A1');
  var formula = source.getValue();
  var target = sheet.getRange('B1');
  target.setFormula(formula);
}

Связанный

person Rubén    schedule 12.01.2020
comment
Спасибо! Это сработало! Я использую эту формулу, но меняю первую строку с помощью function onEdit () {, потому что все работало с помощью кнопки воспроизведения в редакторе сценариев, но я не знал, как активировать ее из электронной таблицы. Как я мог выполнить этот запуск автоматически? - person Gastón BA; 12.01.2020
comment
@ GastónBA Чтобы запустить функцию из электронной таблицы, вы можете добавить изображение и назначить ему функцию, чтобы при каждом щелчке по изображению функция запускалась. Также вы можете добавить собственное меню. Использование простого триггера редактирования должно работать, но, возможно, вам следует внести и другие изменения, например, использовать объект события редактирования для получения вычисленной строки формулы при редактировании одной из указанных ячеек. . Если вам нужна дополнительная помощь, задайте новый вопрос. - person Rubén; 12.01.2020