如何使用Google Apps Script复制工作表并按第1行最后一列值重命名?
原脚本问题定位
- 获取最后一列时错误调用了
getLastColumn() +1,得到的是第一行最后一个有值单元格右侧的空列,无法拿到目标值 - 错误使用整行范围调用
getDisplayValue(),该方法仅针对单个单元格返回正确文本,多选范围只会返回第一个单元格的内容 - 范围参数传递逻辑错误,getRange的第四个参数是列数,你传入了Range对象而非数值,会触发参数不匹配报错
修复后可用脚本
function AddReportSheet() { var ss = SpreadsheetApp.getActiveSpreadsheet(); // 保存当前激活的原工作表对象 var originalSheet = ss.getActiveSheet(); // 获取第一行最后一个有值的列号 var lastColOfFirstRow = originalSheet.getLastColumn(); // 读取对应单元格的显示值作为新表名称 var newSheetName = originalSheet.getRange(1, lastColOfFirstRow).getDisplayValue(); // 复制原工作表并直接设置名称 originalSheet.copyTo(ss).setName(newSheetName); }
如果你希望保留原本的duplicate写法,也可以替换最后一行为以下两行,运行效果一致:
ss.duplicateActiveSheet(); ss.renameActiveSheet(newSheetName);
补充说明
- 新工作表默认会排在所有现有工作表的最后,如果需要新表排在原工作表旁边,可以在脚本最后追加代码调整位置
- 运行前请确认第一行最后一个有值单元格的内容符合Google Sheets工作表命名规则,不能包含
[]:*?/\这些特殊字符,也不能和已有工作表重名
内容的提问来源于stack exchange,提问作者weizer
相关产品推荐
相关产品推荐

