Очистка данных в Google Sheets с использованием JavaScript - PullRequest
0 голосов
/ 27 июня 2018

Я делал алгоритм очистки в Сценариях Служб Google, чтобы автоматизировать обрезку листа, вырезанного из файла PDF.

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

До этой грубой ситуации логика регистра была не совсем правильной, НО сценарий проходил через первый оператор if, второй цикл, второй оператор if, оператор case; успешно удалив ненужные строки. Тогда это не сбрасывало свойства i и j, поэтому все стало немного странно.

Теперь, когда я исправил логику кейса, он просто проходит через i и не распознает переход к второму циклу через первый оператор if, и я ЗАТЕРЯЛ.

Заранее извиняюсь, если мое форматирование / документация брутто; Я в значительной степени самоучка и с радостью приветствую любую критику!

function ytdClean() {

var app = SpreadsheetApp;
var sheet = app.getActiveSpreadsheet().getSheetByName("Sheet1");
var sheetEnd = sheet.getLastRow();

for (var i = 1; i <= sheetEnd; i++) {                           //1. Loop i through column A 1:sheetEnd...

    var x = sheet.getRange(i, 1);
    Logger.log('x = ' + x.getValue());

    if (x.getValue() == '') {                                   //...until null entry x

        for (var j = x.getRow + 1; j <= sheetEnd; j++) {        //2. Loop j through column A from x + (1,0)...

            var y = sheet.getRange(j, 1);
            var z = sheet.getRange(j + 1, 1);
            Logger.log('y = ' + y.getValue());

            if (y.getValue() != '') {                           //...until non-null entry y; 

                var switchVal = z.getValue();
                Logger.log('z = ' + switchVal + '...');

                switch (switchVal) {                            //3. Switch

                    case "001":                                 //case: z = y + (1,0) = 001...

                        var a = x.getRow();
                        var b = y.getRow() - 1;
                        sheet.deleteRows(a, b - a);             //...delete rows of x through y...
                        i = a - 1;
                        Logger.log("...case 001");
                        break;                                  //...break;

                    case "01":                                  //case: z = 01...

                        var a = x.getRow();
                        var b = sheetend;
                        sheet.deleteRows(a, b - a);             //...delete rows between and including x, y and all rows after y;
                        i = a - 1;
                        Logger.log("...case 01");
                        break;                                  //...break;

                    default:                                    //case: 001 < z < 1000... 

                        var a = x.getRow();
                        var b = y.getRow();
                        sheet.deleteRows(a, b - a);             //...delete rows of x through y...
                        i = a - 1;
                        Logger.log("...default");
                        break;                                  //...break;

                    }

                }

            }

        }

    }

}

Кто-нибудь может увидеть, что я здесь делаю не так? Я пытался использовать [null] вместо [''] в операторах if, и это ничего не меняет. Тем не менее, наплевать на эти заявления if ...

1 Ответ

0 голосов
/ 27 июня 2018

Листы Google обрабатывают данные не так, как JavaScript. В Google Sheets нет null, но

  • Range.getValue () вернет '' (пустая строка)

    • для пустой ячейки
    • для ячейки, содержащей =""
    • для клетки, содержащей ' (апостроф).

В некоторых случаях все вышесказанное хорошо, а в других нет.

Также стоит отметить, что

  • Range.isBlank () вернет

    • верно для пустой ячейки
    • false для ячейки, содержащей =""
    • false для ячейки, содержащей ' (апостроф)

С другой стороны, в JavaScript есть два оператора "равенства",

  • == (равенство a.k.a абстрактное равенство)
  • === (личность a.k. строгое равенство)

Относящиеся

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