Google Sheets脚本开发:批量复制指定Drive文件夹表格值到目标表格
解决Google Sheets脚本复制纯值并批量创建标签的问题
核心需求实现方案
针对你需要的功能——读取指定Drive文件夹内的表格,复制"ALL"标签的纯值到目标表格并按序号命名新标签,以下是修正后的完整脚本:
function onOpen() { // 创建自定义菜单 const ui = SpreadsheetApp.getUi(); ui.createMenu('批量导入数据') .addItem('开始导入', 'importAllSheetsValues') .addToUi(); } function importAllSheetsValues() { const folderId = '你的文件夹ID'; // 替换为"My folder"的ID const targetSpreadsheetId = '你的目标表格ID'; // 替换为目标SS的ID const folder = DriveApp.getFolderById(folderId); const files = folder.getFiles(); const targetSs = SpreadsheetApp.openById(targetSpreadsheetId); let sheetCounter = 1; // 用于命名新标签的序号 while (files.hasNext()) { const file = files.next(); // 只处理Google Sheets文件 if (file.getMimeType() === MimeType.GOOGLE_SHEETS) { const sourceSs = SpreadsheetApp.open(file); const sourceSheet = sourceSs.getSheetByName('ALL'); // 跳过没有"ALL"标签的表格 if (!sourceSheet) continue; // 获取"ALL"标签的所有纯值(不含公式) const dataValues = sourceSheet.getDataRange().getValues(); const rowCount = dataValues.length; const colCount = dataValues[0].length; // 检查目标表格中是否已存在同名序号标签,若存在则跳过或重命名 let newSheet = targetSs.getSheetByName(String(sheetCounter)); if (!newSheet) { newSheet = targetSs.insertSheet(String(sheetCounter)); } else { // 可选:如果需要覆盖已有标签内容,可清空后重新写入 newSheet.clearContents(); } // 将纯值写入新标签 newSheet.getRange(1, 1, rowCount, colCount).setValues(dataValues); sheetCounter++; } } }
关键修正点说明
- 获取纯值而非公式:使用
getDataRange().getValues()直接提取单元格的计算后的值,彻底避免原公式带来的#REF错误。 - 正确遍历源表格:脚本会逐个打开文件夹内的Google Sheets文件,定位到"ALL"标签,而非错误地从目标表格读取数据。
- 序号命名逻辑:通过
sheetCounter变量自动生成"1""2""3"这样的标签名,确保命名规则符合需求。 - 容错处理:跳过没有"ALL"标签的表格,同时处理已存在同名标签的情况(可选择跳过或覆盖内容)。
使用注意事项
- 替换代码中的
你的文件夹ID和你的目标表格ID为实际ID。 - 第一次运行时,需要授权脚本访问Drive和Sheets的权限。
- 如果源表格的"ALL"标签数据量较大,脚本运行时间可能较长,需耐心等待。
内容的提问来源于stack exchange,提问作者José Buzón
相关产品推荐
相关产品推荐

