Преобразовать значение формулы в статическое значение, если ячейка не пуста - PullRequest
1 голос
/ 20 июня 2019

Я использую скрипт, который вычисляет мили между точками. Например, в столбце A Сан-Диего, штат Калифорния, в столбце B Сан-Франциско, столбец C 508.3. Если столбец A или столбец B равен === "", тогда для столбца устанавливается значение "".

// Note: This is not my code. 

function DrivingMeters(origin, destination) {
    var directions = Maps.newDirectionFinder()
    .setOrigin(origin)
    .setDestination(destination)
    .getDirections();
    return directions.routes[0].legs[0].distance.value;
}

function DrivingMiles(origin, destination) {
  if (origin === "" || destination === "") {
    return "";
  } else {
  return DrivingMeters(origin, destination)/1609.34;
  }
}

Я пытаюсь ограничить количество вызовов API, которые я выполняю, потому что у меня много информации, которая регулярно добавляется. Первый шаг, который я сделал, - это возврат "" перед вызовом API, если какой-либо из столбцов пуст. Я также хотел бы преобразовать ячейки в столбце C, которые являются! == "", в статическое значение, удалив формулу вместе. Заранее спасибо!

1 Ответ

2 голосов
/ 20 июня 2019
  • В качестве тестового примера вы помещаете пользовательскую формулу в столбец «C1», например =DrivingMiles(A1,B1).
  • Когда значение столбца «C» НЕ пусто, вы хотите преобразоватьформулы к статическому значению.
  • Вы хотите добиться этого с помощью Google Apps Script.

Из вашего комментария ответа я могу понять, как выше.Если мое понимание верно, как насчет этого ответа?Я думаю, что есть несколько ответов для вашей ситуации.Поэтому, пожалуйста, подумайте об этом как об одном из них.

Шаблон 1:

В этом шаблоне, когда ставится пользовательская формула =DrivingMiles(), когда возвращаемое значение НЕ пусто,формула преобразуется в значение.

Для этой ситуации я использовал триггер события OnEdit простого триггера.Когда вы используете этот скрипт, пожалуйста, скопируйте и вставьте следующий скрипт и поместите пользовательскую формулу, такую ​​как =DrivingMiles(A1,B1).Когда возвращаемое значение НЕ пустое, формула автоматически преобразуется в статическое значение.

Пример сценария:

function onEdit(e) {
  var value = e.range.getValue();
  if (e.range.getColumn() === 3 && ~e.range.getFormula().toUpperCase().indexOf("=DRIVINGMILES(") && value) {
    e.range.setValue(value);
  }
}
  • Если вы хотите запустить триггер события OnEdit дляконкретный лист, пожалуйста, измените приведенный выше скрипт.

Шаблон 2:

В этом шаблоне при запуске следующего сценария ячейки столбца «C» преобразуются из формулк значениям, когда ячейка имеет значение и формулу или единственное значение.

Пример сценария:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(1, 3, sheet.getLastRow(), 1); // Column "C"
  var values = range.getValues();
  var formulas = range.getFormulas();
  var convertedValues = values.map(function(e, i) {return e[0] && formulas[i][0] || e[0] ? [e[0]] : [formulas[i][0]]});
  range.setValues(convertedValues);
}
  • Может использоваться для активного листа.

Ссылки:

...