如何从Google Sheet提取非OK单元格并关联首行列数据至Extract表
解决方案:提取Survey工作表中非OK/ok的单元格并关联行列标签
- 打开目标表格,点击顶部菜单栏「扩展程序」→「Apps 脚本」,进入脚本编辑器
- 替换默认代码为以下脚本:
function extractNonOKCells() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const surveySheet = ss.getSheetByName('Survey'); const extractSheet = ss.getSheetByName('Extract') || ss.insertSheet('Extract'); // 清空Extract工作表原有内容 extractSheet.clearContents(); // 获取冻结的行、列数 const frozenRows = surveySheet.getFrozenRows(); const frozenCols = surveySheet.getFrozenColumns(); const dataRange = surveySheet.getDataRange(); const values = dataRange.getValues(); // 提取冻结行的内容作为统一行标签 const rowLabels = values.slice(0, frozenRows).map(row => row.join(',')); // 提取每一行的冻结列内容作为列标签 const colLabels = values.map(row => row.slice(0, frozenCols).join(',')); const results = []; // 遍历非冻结区域的所有单元格 for (let row = frozenRows; row < values.length; row++) { for (let col = frozenCols; col < values[row].length; col++) { const cellValue = values[row][col]; // 过滤非空且不含OK/ok的单元格(大小写不敏感) if (cellValue && !cellValue.toString().toLowerCase().includes('ok')) { const finalRowLabel = rowLabels.length ? rowLabels.join(',') : `行${row+1}`; const finalColLabel = colLabels[row] || `列${String.fromCharCode(65 + col)}`; const cellA1 = surveySheet.getRange(row+1, col+1).getA1Notation(); // 按示例格式拼接结果 results.push([`(${finalRowLabel},${finalColLabel})-${cellA1}`]); } } } // 将结果写入Extract工作表 if (results.length) { extractSheet.getRange(1, 1, results.length, 1).setValues(results); } }
- 点击脚本编辑器的「保存」按钮,命名项目(如ExtractNonOK)
- 点击「运行」按钮,首次运行需完成权限授权,按提示操作即可
- 运行结束后返回表格,查看「Extract」工作表即可得到整理后的结果
脚本说明
- 自动适配表格的冻结行/列设置,无需手动指定范围
- 大小写不敏感检查单元格内容,避免遗漏小写的ok
- 若没有冻结行/列,自动使用行号/列字母作为标签
- 输出格式完全匹配示例要求
内容的提问来源于stack exchange,提问作者Sélim ben sliman
相关产品推荐
相关产品推荐

