Python实现Excel单元格彩色与非彩色文本提取
Excel单元格多色文本提取方案

各库支持情况说明
pandas、xlrd:无法实现需求。这两个库读取单元格时仅会返回完整的纯文本内容,不会保留单元格内不同文本段的独立字体颜色属性,无法拆分多色文本。openpyxl:可以实现需求,仅支持.xlsx格式文件。该库支持读取单元格富文本属性,可逐段提取文本内容和对应的字体颜色。- 若需要处理旧版
.xls格式文件,可使用xlwings(跨平台,依赖本地安装Excel/WPS)或pywin32(仅Windows平台)调用Office原生接口读取,核心逻辑和openpyxl方案一致。
openpyxl实现代码
首先安装依赖:
pip install openpyxl
提取代码示例:
from openpyxl import load_workbook from openpyxl.cell.rich_text import TextBlock # 加载文件时必须开启rich_text参数,否则无法读取分段富文本 wb = load_workbook("你的目标文件.xlsx", rich_text=True, data_only=False) ws = wb["目标工作表名称"] # 示例:提取A1单元格的分色文本,可按需遍历整列单元格 cell = ws["A1"] color_content = {} for seg in cell.value: # 无单独格式的普通文本段,使用单元格默认字体颜色 if isinstance(seg, str): # 获取单元格默认字体颜色,无特殊设置时默认是黑色 default_color = cell.font.color.rgb if cell.font.color else "FF000000" color_content.setdefault(default_color, []).append(seg) # 带独立格式的富文本块 elif isinstance(seg, TextBlock): seg_color = seg.font.color.rgb if seg.font.color else "FF000000" color_content.setdefault(seg_color, []).append(seg.text) # 拼接同颜色的文本片段 for color in color_content: color_content[color] = "".join(color_content[color]) print(color_content) # 输出格式为 颜色ARGB值: 对应文本内容,示例: # {'FF000000': '这是黑色文本', 'FFFF0000': '这是红色文本'}
注意事项
- openpyxl返回的颜色值为ARGB格式十六进制字符串,例如纯红色为
FFFF0000、纯黑色为FF000000,可根据实际文件内的颜色值做映射匹配。 - 读取文件时不要设置
data_only=True,否则可能丢失富文本格式信息。 - 如果需要批量处理整列多色单元格,只需要遍历对应列的单元格,对每个单元格执行上述分段提取逻辑即可。
内容的提问来源于stack exchange,提问作者Surya Tej
相关产品推荐
相关产品推荐

