Как умножить все значения на один множитель из Google Sheet? - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть 3 столбца с исходными значениями для умножения. Мне нужно умножить каждое значение на множитель и установить результат в следующие 3 столбца в соответствии с источниками. Я сделал скрипт для этого:

function getDefaultPor() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  let rg = sheet.getRange(2, 1, sheet.getLastRow() - 1, 3),
      mp = sheet.getRange(1, 1).getValue(),
      targetRange = sheet.getRange(2, 4, sheet.getLastRow() - 1, 3),
      arrVals = rg.getValues();
  targetRange.setValues(arrVals.map(row => row.map(col => col / mp)))
};

Я работаю ... но в тех случаях, когда ячейки исходных значений пусты (""), моя функция возвращает соответствующие результаты как 0. Мне нужно оставить его пустым как "".

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

Обновлено с журналами:

function getDefaultPor() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  let rg = sheet.getRange(2, 1, sheet.getLastRow() - 1, 3),
      mp = sheet.getRange(1, 1).getValue(),
      targetRange = sheet.getRange(2, 4, sheet.getLastRow() - 1, 3),
      arrVals = rg.getValues();
  targetRange.setValues(arrVals.map(row => row.map(col => !isNaN(col) ? col / mp : col)));
  console.log(JSON.stringify(arrVals)) // log: [[1,2,3],["","",""],[2,8,6],[4,5,7],[6,2,8],[8,8,9],[10,6,10],["","",""],[4,5,7],[6,2,8]]
  let result = targetRange.getValues();
  console.log(JSON.stringify(result)) //log: [[0.1,0.2,0.3],[0,0,0],[0.2,0.8,0.6],[0.4,0.5,0.7],[0.6,0.2,0.8],[0.8,0.8,0.9],[1,0.6,1],[0,0,0],[0.4,0.5,0.7],[0.6,0.2,0.8]]
};

1 Ответ

2 голосов
/ 04 апреля 2020
  • Вы хотите поместить значения столбцов "A", "B" и "C", разделенные на mp, в столбцы "D", "E" и "F".
  • Когда значения столбцов «A», «B» и «C» являются пустыми, необходимо оставить пустым столбцы «D», «E» и «F».

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

От:

targetRange.setValues(arrVals.map(row => row.map(col => col / mp)))

Кому:

targetRange.setValues(arrVals.map(row => row.map(col => col != "" ? col / mp : col)));

Примечание:

  • В этом случае, когда значением является строка, подставляется строковое значение. Когда значением является число, оно делится на mp.
  • Хотя я не уверен в вашей реальной ситуации, в вашем случае вы можете выбрать isNaN и Number.isNaN .

Ссылки:

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

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