SenseNova-Skills 实战:基于 pandas + openpyxl 的多 Sheet 条件筛选与整行标红格式化导出

发布时间:2026/10/12 1:55:10
SenseNova-Skills 实战:基于 pandas + openpyxl 的多 Sheet 条件筛选与整行标红格式化导出
AI 技能人工智能深度研究数据分析媒体生成【免费下载链接】SenseNova-SkillsModular SenseNova skills for building AI-powered office assistants and productivity workflows项目地址https://gitcode.com/gh_mirrors/se/SenseNova-Skills点击查看免费下载本指南围绕 formatted-export 子技能 展开讲解如何在多 Sheet Excel 文件中通过模糊匹配定位目标列筛出含空值与无效字符的记录合并溯源后导出为整行标红的格式化 Excel并生成下载链接。读完本文你将掌握多 Sheet 扫描 → 动态列定位 → 数据清洗筛选 → openpyxl 样式导出这条完整链路并能将其安全接入 SenseNova-Skills 的 Excel 数据分析工作流中处理 10k 行以下的小中型文件。技能定位Excel 工作流中的格式化导出环节在 sn-da-excel-workflow 父级工作流 中Excel 分析被编排为六个步骤跨 Sheet 行数统计 → 大文件阈值分流 → Schema 探查 → 数据清洗 → 条件筛选 →结果导出。formatted-export正是结果导出这一环节的四个 capability 子技能之一承担以下职责遍历所有 Sheet自动定位目标列不需要用户事先给出精确列名识别目标列中的空值、纯空格、字符串 nan等无效记录为每条命中记录追加来源Sheet溯源列导出为 Excel并用 openpyxl 将命中记录整行标红方便视觉识别输出下载链接供用户取用结果文件。该子技能适用于数据清洗、条件筛选与可视化标记场景与 single-sheet-export字段重命名后导出、chart-embedded-export图表嵌入导出、report-generation-export综合分析报告导出互为补充。前三者偏筛选 统计本技能则突出多 Sheet 统一筛选 样式化标记。环境依赖与前置条件子技能 frontmatter 中通过metadata.nanobot.requires声明了三个运行时依赖依赖作用pandas多 Sheet 读取、布尔掩码筛选、DataFrame 合并pd.concat与基础导出to_excelpyarrowParquet 读写引擎用于大文件加速场景本技能前端可选openpyxl工作簿加载load_workbook、单元格样式PatternFill与二次保存适用前提本技能的两个步骤直接使用pd.read_excel全量加载适用于总行数 10k的文件。按 父级工作流的大文件策略表总行数 10k可直接pd.read_excel(...)读取10k – 100k先转 Parquet 缓存再读取 100k必须改读 sn-da-large-file-analysis 技能采用流式读取 Parquet 分块模式禁止用pd.read_excel全量加载否则可能 OOM 或超时。因此在执行本技能前应先按父级工作流 Step 1 用 openpyxlread_only模式统计各 Sheet 行数再决定是否走本技能的直读路径。Step 1多 Sheet 扫描、模糊列匹配与无效记录筛选第一个代码块完成定位目标列 → 构造筛选掩码 → 跨 Sheet 收集 → 合并溯源四件事empty_target_rows [] for sheet_name, sheet_df in all_sheets.items(): target_col None # 优先匹配目标列名示例包含特定关键字的列 for col in sheet_df.columns: if keyword1 in str(col).lower() or keyword2 in str(col).lower(): target_col col break if target_col is None: # 尝试次级推断逻辑 for col in sheet_df.columns: if keyword3 in str(col) and (keyword4 in str(col)): target_col col break if target_col is None: continue # 数据清洗筛选空值和无效字符如空格、nan行 mask sheet_df[target_col].isna() | (sheet_df[target_col].astype(str).str.strip() ) | (sheet_df[target_col].astype(str).str.strip() nan) empty_rows sheet_df[mask].copy() if len(empty_rows) 0: empty_rows.insert(0, 来源Sheet, sheet_name) empty_target_rows.append(empty_rows) # 合并结果 result_df pd.concat(empty_target_rows, ignore_indexTrue) if empty_target_rows else pd.DataFrame()模糊列匹配的两级推断逻辑keyword1/keyword2/keyword3/keyword4是占位关键字实操时替换为目标列的真实语义词。整个定位过程分两级主匹配遍历当前 Sheet 的全部列名若列名字符串转小写后包含任一主关键字即命中并break。转小写.lower()处理了列名大小写不一致的情况次级推断当主匹配失败时尝试同时包含 keyword3 与 keyword4的复合条件用于主关键字过于宽泛或列名含多段语义的场景。若某 Sheet 两级定位均失败直接continue跳过该 Sheet——这正是模糊匹配的意义不同 Sheet 列名存在差异时不会中断整个流程而会将命中失败的 Sheet 静默跳过保证程序健壮性。无效记录的三重掩码mask sheet_df[target_col].isna() | (sheet_df[target_col].astype(str).str.strip() ) | (sheet_df[target_col].astype(str).str.strip() nan)这一行同时处理三类无效值条件捕获对象原理isna()真正的空单元格NaN / Nonepandas 原生缺失值标记astype(str).str.strip() 纯空格、 等空白串先转字符串、去首尾空白后判空astype(str).str.strip() nan字符串形式的 nan某些来源如人工录入会把缺失写为字符串 nan直接isna()无法捕获注意mask两侧都使用了astype(str).str.strip()即使单元格内容不是字符串如数值、日期也不会因类型混用而抛异常这是实战中保证掩码不报错的关键写法。溯源列与结果合并命中行通过empty_rows.insert(0, 来源Sheet, sheet_name)在首列位置插入来源 Sheet 名。这样合并后的结果可以回答这条空值记录到底来自哪个 Sheet这一审计问题。最后pd.concat(..., ignore_indexTrue)将各 Sheet 的子结果纵向拼接、索引重置若全程无命中则result_df为空 DataFrame供下一步判空使用。Step 2openpyxl 整行标红格式化导出第二个代码块把筛选结果落盘为整行红底的 Excel 文件并输出下载链接from openpyxl import load_workbook from openpyxl.styles import PatternFill output_path filtered_results_highlighted.xlsx if not result_df.empty: # 导出基础数据 result_df.to_excel(output_path, indexFalse) # 加载工作簿进行格式化 wb load_workbook(output_path) ws wb.active # 定义红色填充样式 red_fill PatternFill(start_colorFF0000, end_colorFF0000, fill_typesolid) # 遍历所有数据行并标红跳过表头 for row in range(2, ws.max_row 1): for col in range(1, ws.max_column 1): ws.cell(rowrow, columncol).fill red_fill wb.save(output_path) print(f结果文件已保存: {output_path}) print(f下载链接: 点击下载标红结果文件) else: print(未找到符合条件的记录无需导出。)关键实现细节先to_excel再load_workbook回写result_df.to_excel负责数据落盘随后load_workbook重新加载同一文件wb.active取得默认第一个工作表再在单元格级别施加样式。这种先写数据、后补样式的两段式是 pandas openpyxl 协作的典型模式整行标红PatternFill(start_colorFF0000, end_colorFF0000, fill_typesolid)定义实心红色填充。双重循环range(2, ws.max_row 1)×range(1, ws.max_column 1)覆盖除表头外的所有数据行与全部列实现整行而不是单格高亮行号偏移range(2, ...)从第 2 行开始是因为第 1 行是 pandas 写入的表头。该偏移思路与 outlier-coloring 子技能 中Excel 行号 pandas 索引 1的注释一致——pandas 的 0 基索引到 openpyxl 的 1 基坐标转换是此类技能的公共约定下载链接原文档以相对路径形式输出点击下载标红结果文件在沙盒运行环境中可参照 single-sheet-export 与 report-generation-export 的写法输出sandbox:{output_path}形式的可点击链接按实际运行环境二选一即可空结果保护if not result_df.empty分支保证无命中时不产出空文件并明确提示未找到符合条件的记录。同类模式在仓库源码中的印证红色标红并非本技能独有它在 SenseNova-Skills 的 Excel 技能族中形成了可复用的样式惯例可从多个子技能交叉印证outlier-coloring同样使用PatternFill(start_colorFF0000, end_colorFF0000, fill_typesolid)对超限行与#DIV/错误单元格进行红色高亮并给出Excel 行号 pandas 索引 1的显式换算说明与本文的range(2, ...)偏移逻辑互为佐证threshold-cell-coloring展示了更完整的样式体系——表头蓝底白字加粗、细边框、居中对齐、低于均值整行标绿92D050说明 openpyxl 的PatternFill / Font / Alignment / Border / Side组合可以按需扩展出任意配色方案本技能的标红只是其中最简单的一种threshold-filtering提供数值列强制转换 条件过滤 openpyxl 样式标记的相邻模式若你的筛选条件不是空值而是大于某阈值可无缝切换到该技能large-excel-reading在 openpyxl 写入阶段演示了完整样式模板表头填充、字体、边框、列宽、条件高亮与sandbox:下载链接可作为本技能从标红走向专业报表的升级范本。由此可见formatted-export的筛选 → 样式化 → 下载链接三段式是整个excel-result-export与excel-cell-coloring类目下共用的骨架差异只在于筛选条件的构造与填充色的选择。大文件场景的扩展注意点本技能的直读写法有明确边界 10k 行。若文件更大需按 父级工作流 的分级策略处理10k – 100k先执行df pd.read_excel(file_path, sheet_nametarget_sheet)一次df.to_parquet(parquet_path, enginepyarrow)转 Parquet 缓存之后所有后续读取含本技能的列匹配与筛选都改从 Parquet 读避免重复解析 xlsx 100k禁止使用pd.read_excel全量加载与df.apply(lambda...)/df.iterrows()逐行操作应加载 sn-da-large-file-analysis使用其stream_excel_to_parquet()以 50k 行分块、恒定内存地完成读取全文件打印、字体检索等行为也在 父级 SKILL.md 的禁止清单 中明令禁止大文件下的样式化导出同样成立openpyxl 的PatternFill施加于已落盘的 xlsx不受数据量级影响large-excel-reading的 Step 3 即证明该模式可服务于大文件报告。小结与整体工作流的衔接formatted-export位于 sn-da-excel-workflow 的第 6 步结果导出其上游是读取excel-reading/multi-sheet-reading、大文件门控excel-reading/large-excel-reading、清洗excel-data-cleaning/missing-value-handling、invalid-data-cleaning与筛选excel-data-filtering/condition-filtering。实际编排时只需按需加载对应子技能read_file单个 SKILL.md勿一次性全部加载以节省上下文即可从多 Sheet 空值记录定位 整行标红导出这一单点能力出发组装出完整的 Excel 数据清洗与报告生成流水线。skills_root/sn-da-excel-workflow/capability/excel-result-export/formatted-export/SKILL.md ← 本文核心 skills_root/sn-da-excel-workflow/SKILL.md ← 工作流编排与规模门控 skills_root/sn-da-excel-workflow/capability/excel-result-export/single-sheet-export/SKILL.md ← 相邻导出模式 skills_root/sn-da-excel-workflow/capability/excel-cell-coloring/outlier-coloring/SKILL.md ← 红色高亮惯例 skills_root/sn-da-large-file-analysis/SKILL.md ← 100k 行流式读取以上skills_root即仓库根目录skills/实际引用时替换为 skills/ 下的完整相对路径即可。赞分享AI 技能人工智能深度研究数据分析媒体生成【免费下载链接】SenseNova-SkillsModular SenseNova skills for building AI-powered office assistants and productivity workflows项目地址https://gitcode.com/gh_mirrors/se/SenseNova-Skills点击查看免费下载相关推荐SenseNova-Skills 条件筛选子技能实战Excel 多维度条件筛选、正则提取与标红导出全流程SenseNova Skills 条件筛选子技能实战Excel 多维度条件筛选、正则提取与标红导出全流程 条件筛选 condition filteringAI 技能人工智能深度研究数据分析媒体生成SenseNova-Skills 阈值筛选子技能threshold-filtering实战数值清洗、条件过滤与 openpyxl 单元格样式标记SenseNova Skills 阈值筛选子技能threshold filtering实战数值清洗、条件过滤与 openpyxl 单元格样式标记 导读 AI 技能人工智能深度研究数据分析媒体生成SenseNova-Skills 实战基于多维数值条件筛选的 Excel 数据处理与大规模性能优化SenseNova Skills 实战基于多维数值条件筛选的 Excel 数据处理与大规模性能优化 导读 本文围绕 SenseNova Skills 仓库中AI 技能人工智能深度研究数据分析媒体生成上一篇ThinkPad终极散热指南如何在Windows上实现智能风扇控制下一篇XXPermissions 权限框架适配 HelpDoc 实战指南从 Android 11 分区存储到永久拒绝与国产 ROM 兼容性问题排查创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考