Проверка, пуста ли ячейка в Google scripts

#javascript #arrays #google-apps-script #google-sheets

#javascript #массивы #google-apps-script #google-sheets

Вопрос:

Я пытаюсь создать форму в Google sheets, чтобы, если в столбце E есть имя (или любое ненулевое значение), он проверял, что остальные поля были заполнены в столбцах F, G, H и т. Д. Для этого я создал два массива, один сзначения столбца E и другого со значениями в проверяемой строке. Проблема, с которой я сталкиваюсь, связана с нулевым условием во втором для итерации

 var range = R13A.getRange("E7:E15");
var values = range.getValues();

var i = [];
for (var y = 0; y < values.length; y  )
{
    if (values[y]!="" amp;amp; values[y].toString().trim()!="") //here it checks if a name is there
    {
        i.push(y);
        var valRow = Number(i) Number(range.getRow());
        var range1 = R13A.getRange("G" valRow ":T" valRow);
        var values1 = range1.getValues();
        for (var x=0;x<values1.length;x  )
        {
            SpreadsheetApp.getUi().alert(values1[x]); // this part is just to check what values there are on the cells, it always returns ",,,,,,,," which means the cells actually are empty
            if (values1[x]=="") // And here it should check if on the same row there are any blank cells. **THIS IS THE CONDITION THAT ISN'T BEING MET, WHETHER THE CELL HAS SOMETHING WRITTEN ON IT OR NOT**
            {
                validator = validator " " R13A.getRange(String.fromCharCode(7 y) 5).getValue(); //this saves the field names that need to be filled
            }
        }
    }
}
 

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

Заранее спасибо

Ответ №1:

Я попытался проверить, каково значение values1[x] , и после тестирования, похоже, оно возвращает массив.

поскольку getValues вы возвращаете 2D-массив, вам нужно values1[x] values1[0][x] вместо этого получить доступ к as, поскольку мы всегда уверены, что есть только одна строка, и пройти по столбцам.

Поскольку ваша validator переменная на данный момент не работает, я упростил ее с помощью печати we have blank cells .

это код, который я тестировал.

   for(var y = 0; y < values.length; y  ){
    if (values[y] amp;amp; values[y].toString().trim()) {
      i.push(y);
      var valRow = Number(y)   Number(range.getRow()); // you used Number(i) here but it should be Number(y)
      var range1 = R13A.getRange("G"   valRow   ":T"   valRow);
      var values1 = range1.getValues();
      for (var x = 0; x < values1[0].length; x  ) {               // changed values1 to values1[0] instead
        if (!values1[0][x] amp;amp; !values1[0][x].toString().trim()) { // changed values1 to values1[0] instead
          Logger.log("we have blank cells");
        }
      }
    }
  }
 

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

Вот пример листа:

примерный лист

Где ячейки, окрашенные красным, пустые (всего 8)

и вот результат кода:

пример вывода

Как мы видим на выходе, мы смогли правильно их посчитать.

Если у вас есть еще какие-либо вопросы, не стесняйтесь спрашивать меня.

Комментарии:

1. Большое вам спасибо, у меня это сработало. Я пробовал похожие подходы, но сам не нашел ответа. Еще раз спасибо

2. @FernandoMiquelCastro, Рад, что я помог. Не стесняйтесь также поддержать мой ответ, если вы считаете, что это было полезно для вас.