You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用getSheets(file)时出现TypeError:无法读取undefined的getId属性

错误原因及修正方案

核心错误:file参数未正确传递

报错TypeError: Cannot read properties of undefined (reading 'getId')的直接原因是调用getSheets(file)时,传入的file参数为undefined。你需要确保调用这个函数时,传入的是有效的Google Drive文件对象(比如通过DriveApp.getFileById("文件ID")获取的对象,或是从文件选择器、触发器事件中正确传递的文件实例)。

代码中的其他问题及修正

1. 重复声明变量导致混淆

你连续两次声明了sourceSheet,第一次获取的是指定工作表,第二次覆盖成了整个Spreadsheet对象。虽然后续逻辑用的是Spreadsheet的getSheets()方法,但重复声明容易引发逻辑混乱,建议合并或重命名变量。

2. 数组遍历方式不规范

使用for(var i in allsheets)遍历数组可能会遍历到数组原型上的额外属性,推荐使用for...of或普通for循环来遍历工作表数组。

3. 数据范围获取逻辑错误

在copyData函数中,getRange(16,3,numRows,54)的行数计算有误:numRows是工作表的最后一行号,从第16行开始取numRows行的话,会超出工作表实际范围。正确的行数应该是sourceSheet.getLastRow() - 15(如果最后一行大于等于16),同时要处理工作表行数不足16的情况,避免获取无效范围。

修正后的完整代码

function getSheets(file) {
  // 先校验file参数是否有效
  if (!file) {
    Logger.log("错误:未传入有效的文件对象");
    return;
  }
  
  var sourceSpreadsheet = SpreadsheetApp.openById(file.getId());
  var destSheet = SpreadsheetApp.openById("URLxxx").getSheetByName("sheet1");

  var allsheets = sourceSpreadsheet.getSheets();

  // 使用for...of遍历工作表数组
  for (var sheet of allsheets) {
    if (sheet.getName().includes("X")) {
      Logger.log(sheet.getName());
      copyData(sheet, destSheet);
    }
  }
}

function copyData(sourceSheet, destSheet) {
  var lastRow = sourceSheet.getLastRow();
  // 处理行数不足16的情况
  if (lastRow < 16) {
    Logger.log(sourceSheet.getName() + ":数据行数不足,跳过复制");
    return;
  }
  
  var nextRow = destSheet.getLastRow() + 1;
  var numRows = lastRow - 15; // 从第16行开始的有效行数
  
  var sourceRange = sourceSheet.getRange(16, 3, numRows, 54);
  var sourceValues = sourceRange.getValues();

  destSheet.getRange(nextRow, 1, numRows, 54).setValues(sourceValues);
}

额外注意事项

  • 确保"URLxxx"替换成目标表格的实际ID(不是完整URL,是URL中/d/和/edit之间的字符串)。
  • 检查脚本是否有足够的权限访问源表格和目标表格,必要时重新授权。

内容的提问来源于stack exchange,提问作者SarahH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:47:22