如何基于列表批量创建遵循模板的Google Sheets并填充指定单元格
批量创建并填充Google Sheets模板方案
前置准备
- 确认你的模板表格已创建完成,复制模板的ID(从模板URL中提取,格式类似
123abcXYZ...) - 确认源数据表格的列顺序:A=Title, B=ID, C=Description, D=Address, E=Country, F=Cell_A, G=Cell_B, H=Cell_C(第一行为表头,数据从第二行开始)
实现脚本
打开源数据表格,点击「扩展程序」→「Apps 脚本」,清空默认代码,粘贴以下脚本:
function batchCreateSheetsFromTemplate() { // 替换为你的模板表格ID const TEMPLATE_SPREADSHEET_ID = "你的模板ID"; // 替换为源数据所在的工作表名称(比如"数据列表") const SOURCE_SHEET_NAME = "数据列表"; const ss = SpreadsheetApp.getActiveSpreadsheet(); const sourceSheet = ss.getSheetByName(SOURCE_SHEET_NAME); // 获取所有数据行(跳过表头) const data = sourceSheet.getDataRange().getValues().slice(1); // 遍历每一行数据 data.forEach(row => { const [title, id, description, address, country, cellA, cellB, cellC] = row; // 跳过空行 if (!title) return; try { // 复制模板表格到当前用户的云端硬盘根目录(可修改目标文件夹,见注释) const newSheet = DriveApp.getFileById(TEMPLATE_SPREADSHEET_ID).makeCopy(title); const newSpreadsheet = SpreadsheetApp.openById(newSheet.getId()); // 定义填充单元格的工具函数 function fillCell(cellRef, value) { if (!cellRef || !value) return; // 拆分工作表名和单元格位置(比如"Sheet1!A5"拆成["Sheet1", "A5"]) const [sheetName, cellAddr] = cellRef.split("!"); const targetSheet = newSpreadsheet.getSheetByName(sheetName.trim()); if (targetSheet) { targetSheet.getRange(cellAddr.trim()).setValue(value); } } // 填充对应内容 fillCell(cellA, description); fillCell(cellB, address); fillCell(cellC, country); // 如果需要把ID写入固定位置,可添加以下代码(按需修改) // newSpreadsheet.getSheetByName("Sheet1").getRange("A1").setValue(id); console.log(`已创建表格:${title}`); } catch (e) { console.error(`创建表格${title}失败:${e.message}`); } }); }
脚本说明
- 替换参数:把
TEMPLATE_SPREADSHEET_ID和SOURCE_SHEET_NAME替换为你实际的模板ID和源数据工作表名 - 目标文件夹:默认复制到根目录,如需指定文件夹,可修改
makeCopy方法,比如:DriveApp.getFolderById("目标文件夹ID").createFile(newSheet) - 权限授权:第一次运行脚本时,需要授权Google访问你的云端硬盘和表格,按提示完成授权即可
- 错误处理:脚本会跳过空行,创建失败的表格会在日志中显示错误信息,可通过「查看」→「日志」查看
运行方式
在Apps Script编辑器中,选择batchCreateSheetsFromTemplate函数,点击运行按钮即可开始批量创建。
内容的提问来源于stack exchange,提问作者Felipe S
相关产品推荐
相关产品推荐

