You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过XML提取Excel中黄色高亮对应的条件格式规则?

提取Excel中黄色高亮的条件格式单元格列表

一、改进OpenPyXL实现方案

OpenPyXL并非无法筛选黄色高亮规则,只是需要深入解析条件格式的规则细节,检查填充色的RGB值。以下是可直接使用的代码:

from openpyxl import load_workbook

def get_yellow_highlighted_cf(filename, sheet_name="Sheet1"):
    wb = load_workbook(filename)
    ws = wb[sheet_name]
    yellow_cf_results = []
    
    # 覆盖Excel中常见的黄色高亮HEX值,可根据实际需求调整
    target_yellow_hex = {"FFFF00", "FFF2CC", "FFEB9C", "FFD966"}

    for cf in ws.conditional_formatting:
        # 遍历每个条件格式下的规则
        for rule in cf.cfRule:
            # 检查规则是否包含填充格式
            if hasattr(rule, "fill") and rule.fill:
                fill_pattern = rule.fill.patternFill
                if fill_pattern and fill_pattern.fgColor and fill_pattern.fgColor.rgb:
                    color_hex = fill_pattern.fgColor.rgb.upper()
                    if color_hex in target_yellow_hex:
                        # 提取规则条件(公式)
                        condition = rule.formula[0] if rule.formula else "无明确触发条件"
                        yellow_cf_results.append(
                            f"条件格式 {cf.cells},触发条件:{condition},黄色HEX值:{color_hex}"
                        )
    return yellow_cf_results

# 调用示例
yellow_cf_list = get_yellow_highlighted_cf("你的Excel文件.xlsx")
for item in yellow_cf_list:
    print(item)

该代码会遍历工作表所有条件格式规则,检查填充前景色是否匹配目标黄色集合,最终返回符合要求的区域、触发条件及对应色值。

二、直接解析Excel XML文件

XLSX本质是压缩包,内部xl/worksheets/[工作表名].xml存储了工作表的条件格式数据,xl/styles.xml存储样式定义。直接解析XML速度更快,无需依赖Excel客户端。

解析代码示例

import zipfile
import xml.etree.ElementTree as ET

def parse_yellow_cf_via_xml(filename, sheet_name="sheet1"):
    yellow_cf_results = []
    target_yellow_hex = {"FFFF00", "FFF2CC", "FFEB9C", "FFD966"}
    # Excel XML默认命名空间
    ns = {"default": "http://schemas.openxmlformats.org/spreadsheetml/2006/main"}

    with zipfile.ZipFile(filename, "r") as zf:
        # 1. 读取样式XML,预存所有差异格式(DXF)的填充色
        style_tree = ET.fromstring(zf.read("xl/styles.xml").decode("utf-8"))
        dxf_color_map = {}
        for idx, dxf in enumerate(style_tree.findall(".//default:dxfs/default:dxf", ns)):
            fill = dxf.find("default:fill", ns)
            if fill:
                fg_color = fill.find("default:patternFill/default:fgColor", ns)
                if fg_color and "rgb" in fg_color.attrib:
                    dxf_color_map[idx] = fg_color.attrib["rgb"].upper()

        # 2. 读取工作表XML,筛选黄色条件格式
        sheet_tree = ET.fromstring(zf.read(f"xl/worksheets/{sheet_name}.xml").decode("utf-8"))
        for cf in sheet_tree.findall(".//default:conditionalFormatting", ns):
            cell_range = cf.find("default:sqref", ns).text
            for rule in cf.findall("default:cfRule", ns):
                # 处理引用DXF样式的规则
                dxf_id = rule.get("dxfId")
                if dxf_id and int(dxf_id) in dxf_color_map:
                    color_hex = dxf_color_map[int(dxf_id)]
                    if color_hex in target_yellow_hex:
                        formula = rule.find("default:formula", ns).text if rule.find("default:formula", ns) else "无明确触发条件"
                        yellow_cf_results.append(
                            f"条件格式 {cell_range},触发条件:{formula},黄色HEX值:{color_hex}"
                        )
                # 处理直接定义填充的规则
                fill = rule.find("default:fill", ns)
                if fill:
                    fg_color = fill.find("default:patternFill/default:fgColor", ns)
                    if fg_color and "rgb" in fg_color.attrib:
                        color_hex = fg_color.attrib["rgb"].upper()
                        if color_hex in target_yellow_hex:
                            formula = rule.find("default:formula", ns).text if rule.find("default:formula", ns) else "无明确触发条件"
                            yellow_cf_results.append(
                                f"条件格式 {cell_range},触发条件:{formula},黄色HEX值:{color_hex}"
                            )
    return yellow_cf_results

# 调用示例
xml_result = parse_yellow_cf_via_xml("你的Excel文件.xlsx")
for item in xml_result:
    print(item)

该方法直接读取压缩包内的XML文件,跳过了Excel客户端交互,速度远快于PyWin32和Xlwings,适合批量处理大量文件。

内容的提问来源于stack exchange,提问作者Hooded 0ne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:47:03