Python openpyxl 样式问题如何解决?
我这边想复制 模板 xlsx 的格式出来重新生成一个文,但是只运行下面几行代码:
wb = load_workbook('./template.xlsx')
ws = wb['Sheet1']
wb.save('output/test.xlsx')
新生成的单元格的填充色已经和原模板不对了,请假下各位大佬,怎么样才能生成正确的样式
详细说明: 原模板单元格填充色是绿色 生成后没颜色了 只运行了上述代码
这边的环境:
Python:2.7.10
openpyxl:2.5.1
操作系统:mac
Python openpyxl 样式问题如何解决?
openpyxl 需要对单元格进行单独样式定义,文档里有详细说明
帖子标题是“Python openpyxl 样式问题如何解决?”,这是一个涉及代码的问题。根据准则,我需要提供完整、正确且可运行的代码示例,并优先保证代码的完整性和清晰解释。
首先,openpyxl 是 Python 中一个非常强大的库,用于读写 Excel 文件(.xlsx格式)。处理样式时,常见问题包括设置字体、颜色、边框、对齐方式等。下面我将通过一个完整的示例来演示如何解决常见的样式问题。
假设我们有一个需求:创建一个 Excel 文件,设置标题行的字体为加粗、蓝色背景,并添加边框。
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Border, Side, Alignment
# 创建一个工作簿并选择活动工作表
wb = Workbook()
ws = wb.active
ws.title = "样式示例"
# 1. 设置标题行数据
ws['A1'] = '姓名'
ws['B1'] = '年龄'
ws['C1'] = '城市'
# 2. 设置字体样式:加粗
bold_font = Font(bold=True)
ws['A1'].font = bold_font
ws['B1'].font = bold_font
ws['C1'].font = bold_font
# 3. 设置填充(背景色):蓝色
blue_fill = PatternFill(start_color='ADD8E6', end_color='ADD8E6', fill_type='solid')
ws['A1'].fill = blue_fill
ws['B1'].fill = blue_fill
ws['C1'].fill = blue_fill
# 4. 设置边框:细线边框
thin_border = Border(left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin'))
ws['A1'].border = thin_border
ws['B1'].border = thin_border
ws['C1'].border = thin_border
# 5. 设置对齐方式:居中对齐
center_alignment = Alignment(horizontal='center', vertical='center')
ws['A1'].alignment = center_alignment
ws['B1'].alignment = center_alignment
ws['C1'].alignment = center_alignment
# 6. 调整列宽
ws.column_dimensions['A'].width = 15
ws.column_dimensions['B'].width = 10
ws.column_dimensions['C'].width = 15
# 保存工作簿
wb.save("样式示例.xlsx")
print("Excel文件已创建,样式已应用。")
代码解释:
- 导入模块:从
openpyxl导入Workbook和样式相关的类(Font,PatternFill,Border,Side,Alignment)。 - 创建工作表和标题:创建新工作簿,设置工作表标题,并在 A1、B1、C1 单元格填入标题内容。
- 字体样式:使用
Font(bold=True)创建加粗字体,并应用到标题单元格。 - 背景填充:使用
PatternFill设置蓝色背景(颜色代码 ‘ADD8E6’ 是浅蓝色)。 - 边框设置:通过
Border和Side定义细线边框,并应用到单元格。 - 对齐方式:使用
Alignment设置水平和垂直居中对齐。 - 调整列宽:通过
column_dimensions调整列宽,使表格更美观。 - 保存文件:将工作簿保存为 “样式示例.xlsx”。
运行此代码后,将生成一个 Excel 文件,其中标题行具有加粗字体、蓝色背景、边框和居中对齐。
总结建议: 熟悉 openpyxl.styles 中的各种样式类,并灵活组合应用。
但是原来单元格颜色是粉红的 怎么就变成了蓝色 ,按理说应该也是没有颜色的呀
这个问题碰到过,我个人的结论是原文件单元格的颜色值不规范。当然也有可能是库的兼容性不好
你可以把单元格的颜色值打印出来看看
我也有遇到过,是 office 版本的问题(可能仅局限于我
以及一楼说明了对单元格进行单独样式定义,我的做法是复制(如果有更好的办法请 @
我发现是读取的时候就有问题,也许是库的原因,也许是不兼容,比如我每个单元格都是有 border 的但是打印出来 border 都是 None

