如何用Google App Script拉取并合并Google表格多标签页数据
问题1:使用Google App Script从多个标签页拉取数据
以下是通用的拉取数据脚本,可指定目标标签页,提取指定区域的数据:
function pullDataFromSheets() { const ss = SpreadsheetApp.getActiveSpreadsheet(); // 替换为你需要拉取数据的标签页名称数组 const targetSheetNames = ['7/10/2023', '7/17/2023', '7/24/2023']; let allData = []; targetSheetNames.forEach(sheetName => { const sheet = ss.getSheetByName(sheetName); if (!sheet) return; // 跳过不存在的标签页 // 提取A2:C1002区域的数据,可根据需求修改范围 const rawData = sheet.getRange('A2:C1002').getValues(); // 过滤全空行(可选,避免无效数据) const filteredData = rawData.filter(row => row.some(cell => cell !== '')); allData = allData.concat(filteredData); }); // 可将拉取到的数据写入指定标签页,或在控制台查看 console.log('拉取到的总数据:', allData); // 示例:写入到"数据汇总"标签页 // const summarySheet = ss.getSheetByName('数据汇总'); // if (summarySheet) { // summarySheet.getRange(2, 1, allData.length, allData[0].length).setValues(allData); // } }
代码说明
- 首先获取当前活动表格实例,指定要拉取的标签页名称数组;
- 遍历每个目标标签页,提取指定区域的数据并过滤空行;
- 最终可将合并后的数据输出到控制台,或写入指定的汇总标签页。
问题2:自动合并日期命名的标签页数据
针对每周新增日期命名标签页的场景,以下脚本可自动识别日期格式的标签页,合并指定区域数据到主表,并支持自动定时执行:
function mergeDateSheetsToMain() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const mainSheetName = '主表'; // 替换为你的主标签页名称 let mainSheet = ss.getSheetByName(mainSheetName); // 若主表不存在则创建,并写入表头(从第一个有效日期表复制) if (!mainSheet) { mainSheet = ss.insertSheet(mainSheetName); const firstDateSheet = ss.getSheets().find(sheet => isDateSheetName(sheet.getName())); if (firstDateSheet) { const header = firstDateSheet.getRange('A1:C1').getValues()[0]; mainSheet.getRange(1, 1, 1, header.length).setValues([header]); } } // 清空主表原有数据(保留表头) const lastRow = mainSheet.getLastRow(); if (lastRow > 1) { mainSheet.getRange(2, 1, lastRow - 1, 3).clearContent(); } let mergedData = []; // 遍历所有标签页,筛选日期格式的页面 ss.getSheets().forEach(sheet => { const sheetName = sheet.getName(); // 跳过主表和非日期格式的标签页 if (sheetName === mainSheetName || !isDateSheetName(sheetName)) return; // 提取A2:C1002区域的数据 const rawData = sheet.getRange('A2:C1002').getValues(); const filteredData = rawData.filter(row => row.some(cell => cell !== '')); mergedData = mergedData.concat(filteredData); }); // 将合并数据写入主表 if (mergedData.length > 0) { mainSheet.getRange(2, 1, mergedData.length, mergedData[0].length).setValues(mergedData); } } // 辅助函数:验证标签页名称是否为MM/DD/YYYY格式的有效日期 function isDateSheetName(sheetName) { const datePattern = /^\d{1,2}\/\d{1,2}\/\d{4}$/; if (!datePattern.test(sheetName)) return false; const [month, day, year] = sheetName.split('/').map(Number); const date = new Date(year, month - 1, day); return date instanceof Date && !isNaN(date); }
额外设置:自动每周一执行
- 打开脚本编辑器,点击左侧菜单栏的「触发器」图标;
- 点击「添加触发器」,配置参数:
- 选择函数:
mergeDateSheetsToMain - 事件源:「时间驱动」
- 类型:「周计时器」
- 星期:「周一」
- 设置合适的执行时间
- 选择函数:
这样每周一新增日期标签页后,脚本会自动执行合并操作,无需手动修改公式。
内容的提问来源于stack exchange,提问作者TheBox
相关产品推荐
相关产品推荐

