Google App Script: «range.isBlank ()» имеет значение false, но «if (range.isBlank ())» проходит? - PullRequest
1 голос
/ 20 сентября 2019

Я использую Google App Script.Он основан на Javascript.
Я использую функцию range.isBlank(), которая отвечает ложным логическим значением.
Я проверил в отладке, что это ложное логическое значение.

Но с большим удивлением я обнаружил утверждение if(range.isBlank()) {...}пройти через код ...

Я попробовал какое-то решение, найденное на сайте, включая использование ===true.Но ничего не работает.

Чтобы воспроизвести, создайте электронную таблицу и поместите в активный лист такие данные:

   |       A         |   B   |   C   |   D   |  E   |
1     "Larry Page"       1       2       3
2     "Larry Page"       1       2
3     "Larry Page"       1    

В редакторе сценариев скопируйте приведенный ниже код и выполните функцию.

function DebugGoogle() {

    var ssheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ssheet.getActiveSheet()

// Get sheet dimension   
    var nbRow = sheet.getMaxRows();

// Loop on the rows
    for (var i=1; i<=nbRow; i++) {

// Start at the first column
        var range = sheet.getRange(i, 1);
        var nextRange = sheet.getRange(i, range.getLastColumn()+1);
        if (nextRange.isBlank()); {
            nextRange.setNote(nextRange.isBlank());
        }

// Go right As long as the next right cell is not empty
        while (!(nextRange.isBlank())) {
            range = nextRange;
            nextRange = sheet.getRange(i, range.getLastColumn()+1);
            if (nextRange.isBlank()); {
                nextRange.setNote(nextRange.isBlank());
            }
        }
    }
}

Я ожидаю заметку только в первой пустой ячейке каждой строки.D для строки 1, C для строки 2, B для строки 3. Вместо этого у меня также есть примечание для непустых ячеек.Что странно, потому что примечание является «ложным», но оператор if вводит ...

if (nextRange.isBlank()); {
    nextRange.setNote(nextRange.isBlank());
}

Я ожидал только примечание с истинным значением ...

1 Ответ

1 голос
/ 20 сентября 2019

Если ваш скрипт правильно скопирован из вашего текущего скрипта, я думаю, что в вашем скрипте проблема ; из if (nextRange.isBlank()); {.В этом случае nextRange.setNote(nextRange.isBlank()) всегда выполняется.Так как насчет следующей модификации?

От:

if (nextRange.isBlank()); {
    nextRange.setNote(nextRange.isBlank());
}

До:

if (nextRange.isBlank()) {  // Modified
    nextRange.setNote(nextRange.isBlank());
}

Ссылка:

...