Google Apps Script获取文件夹内各表格指定列最小值汇总方法
文件夹内多表格指定列最小值汇总实现方案
你的初始代码已经完成了文件名、文件ID的基础抓取,新增单表数值列最小值提取的逻辑可以按以下方式实现,你后续调整的版本已经覆盖核心逻辑,这里补充异常兼容、边界处理后的可用版本,以及对应注意事项:
核心逻辑说明
- 遍历文件时先过滤非电子表格类型文件,避免打开非表格文件触发报错
- 逐个打开目标文件后,定位到存数值的指定工作表
- 读取目标数值列的所有单元格内容,通过正则提取有效数字,过滤空值、非数值内容
- 对提取到的有效数字数组取最小值,和文件名、ID一起写入汇总数组
- 最后统一把汇总结果写入当前活动工作表
注意事项
- 代码里的文件夹ID需要替换成你实际的目标文件夹ID
- 工作表名
"Google Pixel 2"需要和所有待统计文件里存数值的工作表名一致,如果要默认取每个文件的第一个工作表,把对应代码替换为SpreadsheetApp.open(file).getSheets()[0]即可 - 当前代码默认读取C列数值,如果你的数值存放在其他列,修改
getRange参数里的列标即可,比如读取E列就改为"E1:E" + lastRow - 内置的正则提取逻辑兼容单元格带文字后缀/前缀的场景,比如单元格内容为
"最低值:-2.5"也能正确提取数字计算,如果你的单元格本身就是纯数字格式,该逻辑也可正常运行
可直接运行的完整代码
function list_all_files_inside_a_folder() { var sh = SpreadsheetApp.getActiveSheet(); var folder = DriveApp.getFolderById('替换为你的目标文件夹ID'); var list = [['Name', 'ID', 'lowest number']]; // 仅遍历文件夹内的Google电子表格文件 var files = folder.getFilesByType(MimeType.GOOGLE_SHEETS); while (files.hasNext()) { var file = files.next(); try { // 定位到目标工作表 var sheet = SpreadsheetApp.open(file).getSheetByName("Google Pixel 2"); if (!sheet) { list.push([file.getName(), file.getId(), '未找到指定工作表']); continue; } var lastRow = sheet.getLastRow(); var validNums = []; // 读取C列所有单元格内容,提取有效数值 if (lastRow >= 1) { var colValues = sheet.getRange("C1:C" + lastRow).getDisplayValues(); for (var i = 0; i < colValues.length; i++) { var cellContent = colValues[i][0].toString().trim(); if (!cellContent) continue; var numPart = cellContent.match(/[\d.-]+/); if (numPart && !isNaN(Number(numPart[0]))) { validNums.push(Number(numPart[0])); } } } // 处理列内无有效数值的边界情况 var minValue = validNums.length ? Math.min(...validNums) : '无有效数值'; list.push([file.getName(), file.getId(), minValue]); } catch (error) { list.push([file.getName(), file.getId(), '读取失败:' + error.message]); } } // 清空工作表原有内容后写入汇总结果 sh.clearContents(); sh.getRange(1, 1, list.length, list[0].length).setValues(list); }
脚本首次运行时会弹出Google授权提示,给足对应权限即可正常运行,不要在共享表格里给陌生脚本开放权限。
内容的提问来源于stack exchange,提问作者Antoine
相关产品推荐
相关产品推荐

