setValue в диапазоне, если ничего в другом диапазоне - PullRequest
0 голосов
/ 01 октября 2018

В Google Spreadsheet я использую редактор сценариев , чтобы вставить Xpath в один столбец между D2: D5.

function untitle() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getRange('D2:D5');
  var cell = '=IMPORTXML(C2, "/html/body/div[2]")'; 
  range.setValue(cell);
};

C2 включает адрес веб-сайта.

Я хотел бы сделать то же самое между E2: E5 , если в ячейке нет ничего D2: D5

Как я могу это сделать?

РЕДАКТИРОВАТЬ I:

Я использую код с xpath для получения информации в D2: D5

Если код получает # N / A (или ничего), я использую второй xpath в E2: E5

Чтобы быть более легким, я хотел бы использовать второй xpath, только если я ничего не получаю в строке D.

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

function untitle() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getRange('D2:D5');
  var range2 = sheet.getRange('E2:E5');
  var cell = '=IMPORTXML(C2, "/html/body/div[2]")'; 
  var cell2 = '=IMPORTXML(C2, "/html/body/div[3]")';
  range.setValue(cell);
  range2.setValue(cell2);
};

Я хотел бы использовать две функции.

  • Первая, чтобы получить информацию в D2: D5
  • Вторая, чтобы получить информацию в E2: E5, еслирезультат - ничто (# N / A) в D2: D5

1 Ответ

0 голосов
/ 01 октября 2018
  • Если ячейки «D2: D5» имеют значения и / или формулы, вы хотите поместить формулу в «D2: D5».
  • Если ячейки «D2: D5»у вас нет значений и / или формул, вы хотите поместить формулу в "E2: E5".

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

Поток:

Поток измененного сценария выглядит следующим образом.

  1. Извлечение значений и формул из ячеек "D2: D5 ".
  2. Если в ячейках есть значения или формулы, поместите формулы в" D2: D5 ".
  3. Если в ячейках нет значений или формул, введитеформулы к "E2: E5", используя offset().

Модифицированный скрипт:

Пожалуйста, измените следующим образом.

От:
range.setValue(cell);
До:
var values = range.getValues().some(function(e) {return e[0]});
var formulas = range.getFormulas().some(function(e) {return e[0]});
if (values || formulas) {
  range.setValue(cell);
} else {
  range.offset(0, 1).setValue(cell);
}

Примечание:

  • Если вы хотите поместить формулу в "E2: E5", когда в "D2: D5" есть только формулы, удалите formulas из сценария.

Ссылки:

Если я не правильно понял ваш вопрос, пожалуйста, скажите мне.Я хотел бы изменить его.

Добавлено:

  1. Поместить формулу cell в "D2: D5".
  2. Получить результаты формул.
  3. Поместите формулу cell2 в "E2: E5" из полученных результатов.
    • var cell2 = '=IMPORTXML(C2, "/html/body/div[3]")';
    • В этом случае, когда результаты «D2: D5» равны "#N/A" или "", введите формулу cell2.

Если мое понимание того, что вы хотите, верно, как насчет этого модифицированного скрипта?Этот скрипт отражает поток выше.

Модифицированный скрипт:

function untitle() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getRange('D2:D5');
  var range2 = sheet.getRange('E2:E5');
  var cell = '=IMPORTXML(C2, "/html/body/div[2]")';
  range.setFormula(cell);

  var values;
  while (r != 4) {
    values = range.getValues();
    var r = values.filter(function(e) {return e[0]}).length;
  }
  var res = values.map(function(e, i) {return e[0] == "#N/A" || e[0] == "" ? ['=IMPORTXML(C' + (i + 2) + ', "/html/body/div[3]")'] : [""]});
  range2.setFormulas(res);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...