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

如何准确获取XLSX合并单元格背景色(无需bfill或合并信息)

提取XLSX合并单元格背景色的解决方案

问题分析

你遇到的问题本质是:Excel的合并单元格仅在左上角主单元格中存储样式信息,其余合并单元格本身没有独立的样式数据,所以openpyxl、StyleFrame这类直接解析XLSX文件结构的库,只能读取到主单元格的颜色,其余合并单元格会返回默认值(比如00000000)。

无需依赖合并单元格信息的解决方案

使用xlwings库,它直接与Excel应用交互,能获取单元格实际显示的背景色(不管是否为合并单元格),不需要提前处理合并单元格数据,也不用bfill这类填充操作。

步骤1:安装xlwings

pip install xlwings

步骤2:提取背景色代码示例

import xlwings as xw
import pandas as pd

# 打开Excel文件(后台运行,不显示界面)
with xw.App(visible=False) as app:
    wb = xw.Book(excel_file)
    sh = wb.sheets[0]
    
    # 获取最大行列数
    rows = sh.used_range.last_cell.row
    cols = sh.used_range.last_cell.column
    
    # 初始化存储颜色的列表
    bckg_color = []
    for row in range(1, rows+1):
        row_colors = []
        for col in range(1, cols+1):
            # 获取单元格显示的背景色(十六进制)
            color_hex = sh.range(row, col).color
            # 转换为Excel样式的十六进制格式(去掉#,转为大写)
            color_hex = color_hex[1:].upper() if color_hex else "FFFFFF"
            row_colors.append(color_hex)
        bckg_color.append(row_colors)

# 转为DataFrame
color_df = pd.DataFrame(bckg_color)
print(color_df)

方案说明

  • xlwings通过调用本地Excel应用,直接读取单元格的显示样式,所以合并单元格的所有位置都会返回实际显示的背景色,完全匹配你想要的结果。
  • 设置visible=False可让Excel在后台运行,不会弹出界面干扰操作。
  • 注意:该方案依赖本地安装的Excel应用,若系统未安装Excel则无法使用。

原方法失效原因

  • openpyxl直接解析XLSX的XML结构,合并单元格的子单元格没有fill属性,因此cell.fill.start_color.index会返回默认的透明色值。
  • StyleFrame基于openpyxl实现,自然也存在相同的局限性。

内容的提问来源于stack exchange,提问作者Андрей Шевцов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:16:30