Используя getRange, возможно ли гарантировать, что пустые ячейки игнорируются? - PullRequest
0 голосов
/ 31 января 2019

Попытка создать приглашение интерфейса для функции, которая будет возвращать 8 отдельных переменных getRange.getValue.Я не могу понять, как игнорировать любые пустые ячейки в диапазоне getRange (в настоящее время я получаю ряд запятых для любой пустой ячейки).

Я пробовал это для каждого диапазона без удачи:

var result = [i for each (i in LiDCO)if (isNaN(i))];
    Browser.msgBox(result);

Я также пробовал Filter (), который также не работал для меня.

var range_input = sheet.getRange(LiDCO).getValues(); var 
filtered_input = range_input.filter(String);

Может кто-нибудь помочь, пожалуйста?

Вот мой полный код:

function Handover() {
  var ss = SpreadsheetApp.getActiveSheet();
  var ui = SpreadsheetApp.getUi();
  var buttons = ui.ButtonSet.OK
  var LiDCO = ss.getRange(3, 15, 9).getValues();
  var filters = ss.getRange(3, 13, 9, 2).getValues();
  var paedfilters = ss.getRange(3, 17, 4).getValues();
  var nox = ss.getRange(8, 17, 4).getValues();
  var tasks = ss.getRange(2, 7, 17, 3).getValues();
  var checks = ss.getRange("A27").getValue();
  var messages = ss.getRange(14, 13, 5, 5).getValues();


  var handover = ui.alert('DAILY HANDOVER SUMMARY','Please check the following equipment and their bed numbers: '
                          + '\r\nLiDCOs:   '    + LiDCO  
                          + '\r\nFilters:   '    + filters 
                          + '\r\nPaed Filters:   '    + paedfilters 
                          + '\r\nNitric:   '   + nox 
                          + '\r\n'
                          + '\r\n....and remember to update the Dashboard.'
                          + '\r\n'
                          + '\r\nTasks outstanding are:  ' 
                          + '\r\n' + tasks 
                          + '\r\n'
                          + '\r\nThere are ' + checks + ' checks that need to be done today.'
                          + '\r\n'
                          + '\r\nMessages: '
                          + '\r\n' + messages
                          , buttons)
  }

Я обновил свой код и теперь он работает для getRange(row, column, numRows), но не с getRange(row, column, numRows, numColumns) Есть ли что-то другое?нужны для лишних столбцов?Полный обновленный код приведен ниже.

function Handover() {
  var ss = SpreadsheetApp.getActiveSheet();
  var ui = SpreadsheetApp.getUi();
  var buttons = ui.ButtonSet.OK
  var LiDCO = ss.getRange(3, 15, 9).getValues();
  var filters = ss.getRange(3, 13, 9, 2).getValues();
  var paedfilters = ss.getRange(3, 17, 4).getValues();
  var nox = ss.getRange(8, 17, 4).getValues();
  var tasks = ss.getRange(2, 7, 17, 3).getValues();
  var checks = ss.getRange("A27").getValue();
  var messages = ss.getRange(14, 13, 5, 5).getValues();

  var filtered_input = LiDCO.filter(String);
  var filtered_input1 = filters.filter(String);
  var filtered_input2 = paedfilters.filter(String);
  var filtered_input3 = nox.filter(String);
  var filtered_input4 = tasks.filter(String);
  var filtered_input5 = messages.filter(String);


  var handover = ui.alert('DAILY HANDOVER SUMMARY','Please check the following equipment and their bed numbers: '
                          + '\r\nLiDCOs:   '    + filtered_input
                          + '\r\nFilters:   '    + filtered_input1
                          + '\r\nPaed Filters:   '    + filtered_input2
                          + '\r\nNitric:   '   + filtered_input3
                          + '\r\n'
                          + '\r\n....and remember to update the Dashboard.'
                          + '\r\n'
                          + '\r\nTasks outstanding are:  ' 
                          + '\r\n' + filtered_input4
                          + '\r\n'
                          + '\r\nThere are ' + checks + ' checks that need to be done today.'
                          + '\r\n'
                          + '\r\nMessages: '
                          + '\r\n' + filtered_input5
                          , buttons)
  }

1 Ответ

0 голосов
/ 04 февраля 2019

В настоящее время вы используете String конструктор в качестве обратного вызова для Array#filter и полагаетесь на "ложное" толкование пустой строки "" поручить Array#filter отказаться от связанной строки.Это терпит неудачу для нескольких столбцов, потому что вызов конструктора String (и, следовательно, Array#toString) для массива с несколькими элементами, например ["", ""], приводит к истинному значению.Решение состоит в том, чтобы создать собственную функцию для использования в качестве обратного вызова для Array#filter.

function myCB(val) {
  // Check if `val` is an array, and if so, require at least one non-empty element in order for this element to be kept
  if (Array.isArray(val))
    return val.filter(myCB).length;
  else if (val)
  {
    // val is not "falsy", e.g. a non-zero number, an arbitrary object, a string of non-zero length, the boolean literal `true`
    return true;
  }
  else if (val === 0)
  {
    // Do you care about numeric `0`?
    // return true; // keep `0`
    // return false; // discard `0`
    throw new Error("pick a return option for val===0");
  }
  else if (val === false)
  {
    // Do you care about boolean `false`?
    // return true; // keep `false`
    // return false; // discard `false`
    throw new Error("pick a return option for val===false");
  }
  else
  {
    // val is `""`, `null`, or `undefined`, so discard it
    return false;
  }
}

Ваш обратный вызов фильтра получит 3 аргумента в соответствии со спецификацией, поэтому любые пользовательские параметры должны быть 4-м или более, чтобывы ошибочно используете аргументы функции.

function myCB(val, isSpecial) // Wrong!

function myCB(val, index, allVals, isSpecial) // Ok
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...