通过ID创建员工专属表格时仅拉取单条数据的问题求助
问题原因
你代码里的quota.getCell(4,1).getValue()是固定读取QuotaFile中Employees表第4行第1列的数据,不管遍历到哪个员工,都用这同一行内容,所以所有生成的表格都显示员工A的数据。
修复方案
核心逻辑是:根据当前遍历的员工,在QuotaFile的Employees表中找到对应行的数据,替换硬编码的行号读取方式。
修复后的完整代码
function createNewGoogleDocs() { const QuotaFile = SpreadsheetApp.openById('AAA'); const googleSheetTemplate = DriveApp.getFileById('BBB'); const destinationFolder = DriveApp.getFolderById('CCC'); const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('employeedata'); const rows = sheet.getDataRange().getValues(); // 一次性读取QuotaFile中Employees表的所有数据,避免循环内重复调用API const quotaSheet = QuotaFile.getSheetByName('Employees'); const quotaData = quotaSheet.getDataRange().getValues(); rows.forEach(function(row, index) { if (index === 0) return; // 跳过表头行 if (row[3]) return; // 跳过已标记处理的行 const employeeId = row[0]; // 假设employeedata表第1列(A列)是员工唯一ID const copy = googleSheetTemplate.makeCopy(`${row[1]}, ${row[0]} EmployeeSummary`, destinationFolder); const doc = SpreadsheetApp.openById(copy.getId()); // 在Quota表数据中匹配当前员工的行 const matchedRow = quotaData.find(quotaRow => quotaRow[1] === employeeId); // quotaRow[1]对应Employees表的B列,索引从0开始,根据你的实际列调整 if (matchedRow) { // 假设要填充的ID是匹配行的第3列(D列,索引2),根据实际需求调整 doc.getRangeByName('ID').setValue(matchedRow[2]); } else { doc.getRangeByName('ID').setValue('无匹配数据'); } doc.saveAndClose(); // 确保修改保存 }); }
你需要根据实际表结构调整的3个点
employeeId = row[0]:如果你的员工唯一标识在employeedata表的其他列(比如B列),改成对应索引(row[1])。quotaRow[1] === employeeId:如果QuotaFile的Employees表中,员工标识在C列,改成quotaRow[2]。matchedRow[2]:如果要提取的ID数据在Employees表的B列,改成matchedRow[1]。
内容的提问来源于stack exchange,提问作者ACA
相关产品推荐
相关产品推荐

