Сценарий Google Sheets падает на getLastRow - PullRequest
0 голосов
/ 18 января 2019

Я работал над сценарием, который принимает входящие данные в разделы, устанавливает каждый раздел на лист, а затем форматирует его соответствующим образом. Он работал хорошо, без проблем несколько раз подряд, как на пустом листе, так и на предыдущих данных до того, как произошла ошибка.

Ошибка возникает, когда код вызывает sheet.getLastRow() во время третьей (из пяти) итерации цикла, как показано здесь . Я не заметил ничего неуместного в отладочных данных , поэтому предположил, что ошибка должна быть в вызове getLastRow. Я переделал код без getLastRow, но такая же ошибка возникает в другой строке при попытке применить группирование строк

Оба эти вызова отлично работают первые 2 раза в цикле. Почему не третий ??

// For each section apply it to sheet

sections.forEach( function(x) {

    var sect = collectionOfSections[x];

    if (!sect) return;

    // If sheet empty apply to first row, otherwise apply after last row + spacing
    var row = (sheet.getLastRow())
        ? sheet.getLastRow() + spacing
        : 1;

    // Grab the first cell of range
    var cell = sheet.getRange(row, 1);

    if (sect.length === 1) {
    // Format according to length and content

        cell.offset(0, 0, 1, sect[0].length)
            .setValues(sect)
            .setBackground(colors[0])
            .setHorizontalAlignment('center')
            .setFontFamily(fontFamily)
            .setFontWeight('bold')
            .setFontSize(
                (x===sections[0])
                    ? e_fontSizes[0]
                    : e_fontSizes[1]
            );

        cell.offset(0, 0, 1, sect[0].filter( function(y) {return y === ''} ).length + 1)
            .merge()
            .setFontStyle('italic');

        cell.offset(0, sect[0].length - 1, 1, maxWidth - sect[0].length + 1)
            .merge()
            .setBackground(
                (x === sections[0])
                    ? colors[0]
                    : colors[2]
            );

    } else {

        cell.offset(0, 0, 1, maxWidth)
            .merge()
            .setValue(sect[0][0])
            .setBackground(colors[0])
            .setHorizontalAlignment('center')
            .setFontSize(e_fontSizes[1] + 1)
            .setFontWeight('bold')
            .setFontFamily(fontFamily)
            .setFontStyle('italic');

        cell.offset(1, 0, 1, sect[1].length)
            .setValues([sect[1]])
            .setHorizontalAlignment('center')
            .setFontFamily(fontFamily)
            .setFontSize(e_fontSizes[1])
            .setFontWeight('bold');

        // for loop start 2, set Values then iterate through each and format accordingly
        for (var i = 2; i < sect.length; i++) {

            cell.offset(i, 0, 1, sect[i].length)
                .setValues([sect[i]])
                .setFontFamily(fontFamily)
                .setFontSize(e_fontSizes[1]);

            sect[i].forEach( function(y, j) {

                if(!isNaN(y) && y.toString().length > 9) cell.offset(i , j, 1, 1).setHorizontalAlignment('center').setNumberFormat(phoneFormat);
                if(y.toString().indexOf('@') > -1) cell.offset(i, j, 1, 1).setHorizontalAlignment('center');
            });

        }   // Apply row banding around content
        cell.offset(1, 0, sect.length - 1, maxWidth)
            .applyRowBanding()
            .setHeaderRowColor(colors[1])
            .setFirstRowColor(colors[2])
            .setSecondRowColor(colors[3]);
    }

    if (x != sections[0]) {
    // If not first section, give section a named range
        var range;
        if (sect.length > 2) range = cell.offset(2, 0, sect.length - 2, maxWidth);
        else range = cell.offset(0, sect[0].length - 1, 1, maxWidth - sect[0].length + 1);

        sheet.getParent()
            .setNamedRange(sheet.getName() + '_' + x, range);
    }
});

1 Ответ

0 голосов
/ 18 января 2019

это, возможно, связано с sheet.getParent().setNamedRange(sheet.getName()+'_'+x, range);, но не со строкой # 135.

Непонятно, почему, и нигде не документировано, но setNamedRange () иногда не позволяет вам иметь имена листов вСтрока имени диапазона.Попробуйте как-нибудь изменить наименование диапазона.

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