Проверка того, пуста ли ячейка в скриптах google

Я пытаюсь создать форму в листах Google, чтобы, если в столбце 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]! = "" && 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
            }
        }
    }
}

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
196
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

  for(var y = 0; y < values.length; y++){
    if (values[y] && 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] && !values1[0][x].toString().trim()) { // changed values1 to values1[0] instead
          Logger.log("we have blank cells");
        }
      }
    }
  }

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

Вот образец листа:

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

и вот вывод кода:

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

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

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

Fernando Miquel Castro 09.12.2020 19:26

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

NightEye 09.12.2020 19:27

Другие вопросы по теме