Google Apps Script批量复制工作表重命名并更新指定单元格问题
Google AppScript 批量创建工作表并写入对应ID方案
核心修改逻辑
- 你已通过
pids = all.getRange('a:a').getValues()获取到A列所有ID值,该数组和存储工作表名称的vals数组索引完全对齐,同一行的表名、ID共用循环索引i,不会出现匹配错位 ss.duplicateActiveSheet()方法执行后会返回新创建的工作表对象,原代码仅通过链式调用设置了表名,只需接住这个返回的工作表对象,调用单元格赋值方法,将对应行的ID写入B22单元格即可实现需求
修正后完整代码
function TemplateDuplication() { var ss = SpreadsheetApp.getActiveSpreadsheet(), temp = ss.getSheetByName('blank-invoice-sample'), all = ss.getSheetByName('main_invoice'), sheets = ss.getSheets(), vals = all.getRange('k:k').getValues(), pids = all.getRange('a:a').getValues(); for (var i = 0, len = sheets.length, names = []; i < len; i++) names.push(sheets[i].getName()); for (var i = vals.length-1; i > 0; i--) { var name = vals[i][0]; if (name !='' && names.indexOf(name) == -1) { temp.activate(); // 接收新创建的工作表对象,设置表名 var newSheet = ss.duplicateActiveSheet().setName(vals[i][0]); // 将当前行对应的A列ID写入新表B22单元格 newSheet.getRange('B22').setValue(pids[i][0]); } } }
可选优化:现有写法直接读取整列数据,如果表格数据量较大,可以将取值范围修改为实际有数据的动态区间,减少空值循环提升运行效率。
内容的提问来源于stack exchange,提问作者gridline81
相关产品推荐
相关产品推荐

