使用 Openpyxl Style Objects 设置 Excel 单元格样式

问题描述 投票:0回答:1

我提取了一个Excel单元格的字体对象,看起来是这样的:

<openpyxl.styles.fonts.Font object> Parameters: 
name='Calibri', 
charset=None, 
family=2.0, 
b=False, 
i=False, 
strike=None, 
outline=None, 
shadow=None, 
condense=None, 
color=<openpyxl.styles.colors.Color object> Parameters: 
    rgb=None, indexed=None, auto=None, theme=1, tint=0.0, type='theme', 
extend=None, 
sz=12.0, 
u='single', 
vertAlign=None, 
scheme='minor'

它由15个属性组成,其中一个是另一个样式对象(颜色对象)。

是否可以使用此字体对象设置 Excel 单元格的字体,而无需提取每个属性并单独应用它。

有点像

cell.font = <openpyxl.styles.fonts.Font object> Parameters: name='Calibri', charset=None, family=2.0, b=False, i=False, strike=None, outline=None, shadow=None, condense=None, color=<openpyxl.styles.colors.Color object> Parameters: rgb=None, indexed=None, auto=None, theme=1, tint=0.0, type='theme', extend=None, sz=12.0, u='single', vertAlign=None, scheme='minor'

代替

cell.font = Font(size=12)
cell.font = Font(underline="single")
etc.

免责声明:我使用的是 openpyxl 2.5.12,我无法升级。

python excel openpyxl
1个回答
0
投票

我降级并检查了提到的版本是否有任何问题

2.5.12
,但它有错误。
观察到的唯一问题是是否在
color
部分设置了某些不兼容的值。这导致 Excel 在打开时修复工作表。
您在评论中包含的样式,即
style1
在这里没有引起任何问题。

测试代码

import openpyxl
from openpyxl.styles import Font, Color

print(openpyxl.__version__)

wb = openpyxl.load_workbook("foo.xlsx")
ws = wb['Sheet1']

cell_A1 = ws['A1']
cell_B1 = ws['B1']

style1 = Font(
    name="Calibri",
    charset=None,
    family=2.0,
    b=True,
    i=False,
    strike=None,
    outline=None,
    shadow=None,
    condense=None,
    color=Color(rgb=None, indexed=None, auto=None, theme=1, tint=0.0, type="theme"),
    extend=None,
    sz=12.0,
    u="single",
    vertAlign=None,
    scheme="minor"
)

style2 = Font(
    b=True,
    charset=None,
    color=Color(rgb='FF00FF00',
                type='rgb'),
    condense=None,
    extend=None,
    family=2.0,
    i=True,
    name="Arial",
    outline=None,
    scheme="minor",
    shadow=None,
    strike=True,
    sz=22.0,
    u="single",
    vertAlign=None,
)

cell_A1.font = style1
cell_B1.font = style2

wb.save("foo_out.xlsx")
© www.soinside.com 2019 - 2024. All rights reserved.