为Google Drive导入的多工作表添加单元格触发的文件名筛选条件
优化Google Apps Script:按指定周数导入数据
修改核心逻辑
- 从目标工作表的B5单元格读取用户指定的周数(格式为WXX,如W09)
- 遍历指定Drive文件夹时,仅匹配文件名与该周数完全一致的电子表格
- 若找到对应文件,导入其指定工作表的数据;未找到则无操作
修改后的完整代码
function getdata() { // 声明变量 var destinationSpreadsheet, destinationSS_ID, destsheet, destrange, file, files, sourcerange, sourceSS, sourcesheet, srcSheetName, sourcevalues, targetWeek; srcSheetName = "SOURCE TAB NAME"; destinationSS_ID = "DESTINATION ID"; // 读取目标工作表B5单元格的指定周数 destinationSpreadsheet = SpreadsheetApp.openById(destinationSS_ID); destsheet = destinationSpreadsheet.getSheetByName('DESTINATION SHEET NAME'); targetWeek = destsheet.getRange("B5").getValue().trim(); // 去除首尾空格 // 校验周数格式(可选,增强容错) if (!targetWeek.match(/^W\d{2}$/)) { SpreadsheetApp.getUi().alert("请在B5单元格输入正确的周数格式,例如W09"); return; } files = DriveApp.getFolderById("DRIVE ID").getFiles(); while (files.hasNext()) { file = files.next(); // 仅处理Google表格,且文件名与目标周数一致 if (file.getMimeType() !== "application/vnd.google-apps.spreadsheet" || file.getName() !== targetWeek) { continue; }; sourceSS = SpreadsheetApp.openById(file.getId()); sourcesheet = sourceSS.getSheetByName(srcSheetName); // 检查源工作表是否存在 if (!sourcesheet) { SpreadsheetApp.getUi().alert(`周数${targetWeek}的文件中未找到指定工作表${srcSheetName}`); continue; } // 获取源数据(跳过表头,取从第2行开始的所有行,共12列) const lastRow = sourcesheet.getLastRow(); if (lastRow <= 1) { SpreadsheetApp.getUi().alert(`周数${targetWeek}的工作表中无有效数据`); continue; } sourcerange = sourcesheet.getRange(2, 1, lastRow - 1, 12); sourcevalues = sourcerange.getValues(); // 将数据写入目标工作表末尾 destrange = destsheet.getRange(destsheet.getLastRow() + 1, 1, sourcevalues.length, sourcevalues[0].length); destrange.setValues(sourcevalues); SpreadsheetApp.getUi().alert(`已成功导入周数${targetWeek}的数据`); break; // 找到对应文件后停止遍历,避免重复处理 }; }
关键改动说明
- 添加
targetWeek变量,从目标工作表B5单元格读取用户指定的周数,并做格式校验 - 遍历文件时增加
file.getName() !== targetWeek的判断,仅处理匹配的文件 - 增加源工作表存在性、数据有效性的校验,搭配弹窗提示提升用户体验
- 找到匹配文件后执行
break终止循环,避免不必要的遍历
内容的提问来源于stack exchange,提问作者Hope Davis
相关产品推荐
相关产品推荐

