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

Google Sheets JavaScript-TypeError:无法读取属性';getSheetName';未定义的,javascript,google-sheets,google-java-format,Javascript,Google Sheets,Google Java Format,我有一个相同的脚本在三个google工作表上运行,在其中两个工作表上运行得很好,但在其中一个工作表上无法生成,不断向我抛出以下错误: TypeError:无法读取未定义的属性“getSheetName” 以下是脚本: var masterSheetName=“组1”; var ignorethisheets=masterSheetName+,REFERENCE; var-sortColumn=4; var sortAscending=true; 函数onOpen(){ var ui=Spre

我有一个相同的脚本在三个google工作表上运行,在其中两个工作表上运行得很好,但在其中一个工作表上无法生成,不断向我抛出以下错误:

TypeError:无法读取未定义的属性“getSheetName”

以下是脚本:

var masterSheetName=“组1”;
var ignorethisheets=masterSheetName+,REFERENCE;
var-sortColumn=4;
var sortAscending=true;
函数onOpen(){
var ui=SpreadsheetApp.getUi();
//或文档或格式。
ui.createMenu(“自定义菜单”)
.addItem('Generate Master Sheet','menuItem1')
.addToUi();
}
函数menuItem1(){
//插入最终表();
从图纸(母版图纸名称)收集数据;
}
函数getRangeFromSheetsToCopy(thissheet、skipRows、skipCols){
返回thissheet.getRange(skipRows、skipCols、thissheet.getLastRow()、thissheet.getLastColumn());
}
函数insertFinalSheet(){
var activeSpreadsheet=SpreadsheetApp.getActiveSpreadsheet();
var itt=activeSpreadsheet.getSheetByName(masterSheetName);
国际单项体育联合会(itt){
activeSpreadsheet.deleteSheet(itt);
}
activeSpreadsheet.insertSheet(masterSheetName);
}
函数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=真;
控制台日志(“工作表:+工作表”);
log(“activeSpreadsheet:+activeSpreadsheet”);
对于([i,第页]在第页中){
控制台日志(“i:+i”);
var sheetName=sheet.getSheetName();
console.log(“工作表:+sheetName”);
如果(忽略ThisSheets.indexOf(sheetName)>=0){
console.log(“跳过工作表:+sheetName”);
持续
} 
var电流范围;
//获取作为粘贴目标的工作表的范围。
var范围;
console.log('masterSheet.getLastRow()是:'+masterSheet.getLastRow())
console.log('masterSheet.getLastColumn()为:'+masterSheet.getLastColumn())
console.log('sheet.getLastRow()为:'+sheet.getLastRow())
console.log('sheet.getLastColumn()为:'+sheet.getLastColumn())
//currentSheetRange=GetRangeFromSheetToCopy(第1页,第1页);
currentSheetRange=sheet.getRange(2,1,getLastRow(sheet),sheet.getLastColumn());
如果(第一)
粘贴范围=母版纸。获取范围(2,1);
其他的
粘贴范围=母版纸.getRange(getLastRow(母版纸)+1,1);
var columnWidths=SpreadsheetApp.CopyPasteType.PASTE_NORMAL;
currentSheetRange.copyTo(粘贴范围);
currentSheetRange.copyTo(粘贴范围、列宽、假);
第一个=假;
masterSheet.getRange(2,1,masterSheet.getLastRow(),masterSheet.getLastColumn()).sort({column:sortColumn,升序:sortScending});
}
返回值;
}
函数getLastRow(第页){
var Avals=sheet.getRange(“A1:A”).getValues();
console.log('Avals is:'+Avals)
var Alast=Avals.filter(String).length;
log('Alast为:'+Alast);
返回Alast;

}
在下面这一行中,所有元素都是
null
,因此,这就是您收到
TypeError:cannotread属性“getSheetName”的未定义错误消息的原因

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
    });


}

for(变量i=0;i=0){
Logger.log(“跳过工作表:+sheetName”);
持续
}
var电流范围;
//获取作为粘贴目标的工作表的范围。
var范围;
Logger.log('masterSheet.getLastRow()是:'+masterSheet.getLastRow())
Logger.log('masterSheet.getLastColumn()为:'+masterSheet.getLastColumn())
Logger.log('sheets[i].getLastRow()是:'+sheets[i].getLastRow())
Logger.log('sheets[i].getLastColumn()是:'+sheets[i].getLastColumn())
//currentSheetRange=GetRangeFromSheetToCopy(第1页,第1页);
currentSheetRange=sheets[i].getRange(2,1,getLastRow(sheets[i]),sheets[i].getLastColumn();
如果(第一)
粘贴范围=母版纸.getRange(2,1);
其他的
粘贴范围=母版纸.getRange(getLastRow(母版纸)+1,1);
var columnWidths=SpreadsheetApp.CopyPasteType.PASTE_NORMAL;
currentSheetRange.copyTo(粘贴范围);
currentSheetRange.copyTo(粘贴范围、列宽、假);
第一个=假;
masterSheet.getRange(2,1,masterSheet.getLastRow(),masterSheet.getLastColumn()).sort({
列:sortColumn,
升序:排序
});
}
此外,在
Apps脚本
中,如果要
log
a
value
,可以使用
Logger.log(value)
,如果检查
日志
,应该可以看到所有记录的值