繁体   English   中英

Google Sheets JavaScript - TypeError:无法读取未定义的属性“getSheetName”

[英]Google Sheets JavaScript - TypeError: Cannot read property 'getSheetName' of undefined

我在三个谷歌工作表上运行了一个相同的脚本,它在其中两个工作表上运行良好,但在其中一个它不会生成,不断向我抛出以下错误:

类型错误:无法读取未定义的属性“getSheetName”

这是一个你可以玩的版本,如果你喜欢

这是脚本:

 var masterSheetName = "GROUP 1"; var ignoreThisSheets=masterSheetName+ ",REFERENCE,"; var sortColumn=4; var sortAscending = true; function onOpen() { var ui = SpreadsheetApp.getUi(); // Or DocumentApp or FormApp. ui.createMenu('Custom Menu') .addItem('Generate Master Sheet', 'menuItem1') .addToUi(); } function menuItem1() { // insertFinalSheet(); collectDataFromSheets(masterSheetName); } function getRangeFromSheetsToCopy(thissheet, skipRows, skipCols) { return thissheet.getRange(skipRows, skipCols, thissheet.getLastRow(), thissheet.getLastColumn()); } function insertFinalSheet() { var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var itt = activeSpreadsheet.getSheetByName(masterSheetName); if (itt) { activeSpreadsheet.deleteSheet(itt); } activeSpreadsheet.insertSheet(masterSheetName); } function collectDataFromSheets(masterSheetName) { var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheets = activeSpreadsheet.getSheets(); var masterSheet = activeSpreadsheet.getSheetByName(masterSheetName); var range = masterSheet.getRange(2,1,masterSheet.getLastRow(),masterSheet.getLastColumn()); range.clear(); var colValues = []; var first = true; console.log("Sheets : " + sheets); console.log("activeSpreadsheet : " + activeSpreadsheet); for ([i, sheet] in sheets) { console.log("i : " + i); var sheetName = sheet.getSheetName(); console.log("Working on sheet: " +sheetName); if(ignoreThisSheets.indexOf(sheetName)>= 0){ console.log("Skipping sheet: " +sheetName); continue; } var currentSheetRange; // Get the range of the sheet that is your paste target. var pasteRange; console.log('masterSheet.getLastRow() is:' + masterSheet.getLastRow()) console.log('masterSheet.getLastColumn() is:' + masterSheet.getLastColumn()) console.log('sheet.getLastRow() is:' + sheet.getLastRow()) console.log('sheet.getLastColumn() is:' + sheet.getLastColumn()) // currentSheetRange = getRangeFromSheetsToCopy(sheet, 1, 1); currentSheetRange = sheet.getRange(2, 1, getLastRow(sheet), sheet.getLastColumn()); if(first) pasteRange = masterSheet.getRange(2,1); else pasteRange = masterSheet.getRange(getLastRow(masterSheet)+1, 1); var columnWidths = SpreadsheetApp.CopyPasteType.PASTE_NORMAL; currentSheetRange.copyTo(pasteRange); currentSheetRange.copyTo(pasteRange, columnWidths, false); first = false; masterSheet.getRange(2,1,masterSheet.getLastRow(), masterSheet.getLastColumn()).sort({column: sortColumn, ascending: sortAscending}); } return colValues; } function getLastRow(sheet){ var Avals = sheet.getRange("A1:A").getValues(); console.log('Avals is:' + Avals) var Alast = Avals.filter(String).length; console.log('Alast is:' + Alast); return Alast; }

在下面的这一行中,所有元素都是null ,因此,这就是您收到TypeError: Cannot read property 'getSheetName' of undefined错误消息的原因。

for ([i, sheet] in sheets)

您可以像这样更改for循环:

for (var i = 0; i < sheets.length; i++) {
    var sheetName = sheets[i].getSheetName();
    Logger.log("Working on sheet: " + sheetName);

    if (ignoreThisSheets.indexOf(sheetName) >= 0) {
        Logger.log("Skipping sheet: " + sheetName);
        continue;
    }

    var currentSheetRange;
    // Get the range of the sheet that is your paste target.
    var pasteRange;
    Logger.log('masterSheet.getLastRow() is:' + masterSheet.getLastRow())
    Logger.log('masterSheet.getLastColumn() is:' + masterSheet.getLastColumn())
    Logger.log('sheets[i].getLastRow() is:' + sheets[i].getLastRow())
    Logger.log('sheets[i].getLastColumn() is:' + sheets[i].getLastColumn())


    //  currentSheetRange = getRangeFromSheetsToCopy(sheet, 1, 1);
    currentSheetRange = sheets[i].getRange(2, 1, getLastRow(sheets[i]), sheets[i].getLastColumn());
    if (first)
        pasteRange = masterSheet.getRange(2, 1);
    else
        pasteRange = masterSheet.getRange(getLastRow(masterSheet) + 1, 1);

    var columnWidths = SpreadsheetApp.CopyPasteType.PASTE_NORMAL;
    currentSheetRange.copyTo(pasteRange);
    currentSheetRange.copyTo(pasteRange, columnWidths, false);

    first = false;

    masterSheet.getRange(2, 1, masterSheet.getLastRow(), masterSheet.getLastColumn()).sort({
        column: sortColumn,
        ascending: sortAscending
    });


}

此外,在Apps Script ,如果您想log一个value ,您可以使用Logger.log(value)并且如果您检查Logs ,您应该看到所有记录的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM