如何获取Excel单元格字体颜色的RGB值?支持多Python库方案
获取Excel单元格字体RGB值的解决方案
方案一:用openpyxl转换索引色为RGB值
你看到的indexed=10是Excel内置的索引颜色,openpyxl默认不会直接返回RGB,需要通过内置的索引色映射表转换:
import openpyxl as ox from openpyxl.styles.colors import INDEXED_COLORS wb = ox.load_workbook("test.xlsx") ws = wb.worksheets[0] cell_font_color = ws["B3"].font.color if cell_font_color.type == 'indexed': # 从索引色表获取RGB元组(红、绿、蓝,范围0-255) rgb_tuple = INDEXED_COLORS[cell_font_color.indexed].rgb # 转换为常用的十六进制格式(如#RRGGBB) rgb_hex = '#{:02X}{:02X}{:02X}'.format(*rgb_tuple) print(f"RGB元组:{rgb_tuple}") print(f"十六进制RGB:{rgb_hex}") else: # 处理非索引色的情况(如直接设置的RGB或主题色) if cell_font_color.rgb: # openpyxl返回的rgb带Alpha通道,需去掉前两位 rgb_hex = '#' + cell_font_color.rgb[2:] print(f"十六进制RGB:{rgb_hex}")
INDEXED_COLORS包含了Excel所有内置索引色的RGB对应关系,索引10对应的是深绿色(RGB:0, 128, 0)。
方案二:用xlwings直接获取RGB值
xlwings通过调用Excel原生API,可以直接获取单元格实际显示的字体RGB值,无需处理索引或主题色转换,更简单准确:
import xlwings as xw # 后台启动Excel,不显示界面 with xw.App(visible=False) as app: wb = xw.Book("test.xlsx") ws = wb.sheets[0] # 直接获取字体颜色的RGB元组 rgb_tuple = ws.range("B3").font.color rgb_hex = '#{:02X}{:02X}{:02X}'.format(*rgb_tuple) print(f"RGB元组:{rgb_tuple}") print(f"十六进制RGB:{rgb_hex}")
这个方案适合所有颜色类型(索引色、主题色、自定义RGB),结果和Excel界面显示的颜色完全一致。
内容的提问来源于stack exchange,提问作者Rapid1898
相关产品推荐
相关产品推荐

