Python能否读取含背景色格式的Excel模板?求可行解决方案
可用的Python Excel格式读取模块推荐
你提到的需求完全可以实现,以下几个模块能帮你读取Excel模板的单元格格式(背景色、字体样式等),同时支持填充内容保留原有格式:
openpyxl
这是处理xlsx格式的主流库,其实它完全支持读取单元格样式,你之前可能没用到正确的用法。它能直接获取填充色、字体加粗状态、单元格内容等信息,跨平台且无需依赖本地Excel。
示例代码:
from openpyxl import load_workbook # 加载模板文件 wb = load_workbook("你的模板文件.xlsx") ws = wb.active # 获取A1单元格的相关信息 cell = ws['A1'] # 背景色(十六进制值) bg_color = cell.fill.fgColor.rgb # 字体是否加粗 is_bold = cell.font.bold # 单元格原有内容 origin_value = cell.value # 填充新内容,保留格式 cell.value = "新的填充内容" # 保存修改后的文件 wb.save("填充后的文件.xlsx")
xlrd
如果需要处理旧版xls格式的模板,可以用xlrd。注意xlrd 2.0及以上版本不再支持xlsx,若要处理xlsx需安装2.0以下版本(如pip install xlrd==1.2.0)。它能读取格式索引并解析出对应的样式信息。
示例代码:
import xlrd # 加载模板,需开启formatting_info参数 wb = xlrd.open_workbook("你的模板文件.xls", formatting_info=True) ws = wb.sheet_by_index(0) # 获取A1单元格的格式索引 xf_idx = ws.cell_xf_index(0, 0) xf = wb.xf_list[xf_idx] # 解析背景色 fill_color = wb.format_map[xf.background.pattern_colour_index] # 解析字体加粗状态 font = wb.font_list[xf.font_index] is_bold = font.bold # 单元格原有内容 origin_value = ws.cell_value(0, 0)
win32com.client
如果你的运行环境是Windows且安装了本地Excel,这个模块能调用Excel的COM接口,读取所有复杂格式(包括条件格式、合并单元格样式等),兼容性拉满,但仅限Windows平台。
示例代码:
import win32com.client as win32 # 启动Excel应用(后台运行) excel = win32.gencache.EnsureDispatch('Excel.Application') excel.Visible = False # 设为True可看到Excel窗口 # 打开模板文件 wb = excel.Workbooks.Open(r"你的模板文件.xlsx") ws = wb.ActiveSheet # 获取A1单元格信息 cell = ws.Range("A1") # 背景色(RGB数值,可转十六进制) bg_color = cell.Interior.Color # 字体是否加粗 is_bold = cell.Font.Bold # 原有内容 origin_value = cell.Value # 填充新内容 cell.Value = "新的填充内容" # 保存并关闭 wb.SaveAs("填充后的文件.xlsx") wb.Close(False) excel.Quit()
总结
- 优先选openpyxl:跨平台、原生支持xlsx、API友好,满足大部分普通格式需求;
- 处理xls格式用xlrd(注意版本限制);
- 需要复杂格式兼容或Windows环境下用win32com.client。
内容的提问来源于stack exchange,提问作者interkin3tic
相关产品推荐
相关产品推荐

