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 样式问题如何解决?

6 回复

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文件已创建,样式已应用。")

代码解释:

  1. 导入模块:从 openpyxl 导入 Workbook 和样式相关的类(Font, PatternFill, Border, Side, Alignment)。
  2. 创建工作表和标题:创建新工作簿,设置工作表标题,并在 A1、B1、C1 单元格填入标题内容。
  3. 字体样式:使用 Font(bold=True) 创建加粗字体,并应用到标题单元格。
  4. 背景填充:使用 PatternFill 设置蓝色背景(颜色代码 ‘ADD8E6’ 是浅蓝色)。
  5. 边框设置:通过 BorderSide 定义细线边框,并应用到单元格。
  6. 对齐方式:使用 Alignment 设置水平和垂直居中对齐。
  7. 调整列宽:通过 column_dimensions 调整列宽,使表格更美观。
  8. 保存文件:将工作簿保存为 “样式示例.xlsx”。

运行此代码后,将生成一个 Excel 文件,其中标题行具有加粗字体、蓝色背景、边框和居中对齐。

总结建议: 熟悉 openpyxl.styles 中的各种样式类,并灵活组合应用。

但是原来单元格颜色是粉红的 怎么就变成了蓝色 ,按理说应该也是没有颜色的呀

这个问题碰到过,我个人的结论是原文件单元格的颜色值不规范。当然也有可能是库的兼容性不好
你可以把单元格的颜色值打印出来看看

我也有遇到过,是 office 版本的问题(可能仅局限于我
以及一楼说明了对单元格进行单独样式定义,我的做法是复制(如果有更好的办法请 @

我发现是读取的时候就有问题,也许是库的原因,也许是不兼容,比如我每个单元格都是有 border 的但是打印出来 border 都是 None

回到顶部