Google Sheets JavaScript-TypeError:无法读取属性';getSheetName';未定义的
我有一个相同的脚本在三个google工作表上运行,在其中两个工作表上运行得很好,但在其中一个工作表上无法生成,不断向我抛出以下错误: 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
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
avalue
,可以使用Logger.log(value)
,如果检查日志
,应该可以看到所有记录的值