Как openpyxl doc сказал:
Это проект с открытым исходным кодом, поддерживаемый добровольцами в свободное время. Это может означать, что определенные функции или функции, которые вы хотели бы, отсутствуют.
Я проверил исходный код openpyxl, обнаружил, что:
До openpyxl 1.8.x стили изменчивы. Их атрибут может быть назначен непосредственно так:
from openpyxl.workbook import Workbook
from openpyxl.style import Color
wb = Workbook()
ws = wb.active
ws['A1'].style.font.color.index = Color.RED
Однако из openpyxl 1.9 стили неизменны.
Стили являются общими для объектов, и после назначения они не могут быть изменены. Это останавливает нежелательные побочные эффекты, такие как изменение стиля для множества ячеек, когда вместо одной.
Чтобы создать новый объект стиля, вы можете назначить его напрямую или скопировать его из существующего стиля ячейки с новыми атрибутами, ответьте на вопрос в качестве примера (простите мой китайский английский):
from openpyxl.styles import colors
from openpyxl.styles import Font, Color
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
a1 = ws['A1']
d4 = ws['D4']
# create a new style with required attributes
ft_red = Font(color=colors.RED)
a1.font = ft_red
# you can also do it with function copy
ft_red_bold = ft_red.copy(bold=True)
# you can copy from a cell's style with required attributes
ft_red_sigle_underline = a1.font.copy(underline="single")
d4.font = ft_red_bold
# apply style to column E
col_e = ws.column_dimensions['E']
col_e.font = ft_red_sigle_underline
Стиль ячейки содержит следующие атрибуты: шрифт, заливка, граница, выравнивание, защита и число_формат. Чек openpyxl.styles
.
Они похожи и должны быть созданы как объект, кроме number_format, его значение string
type.
Доступны некоторые предварительно определенные числовые форматы, числовые форматы также могут быть определены в строковом типе. Чек openpyxl.styles.numbers
.
from openpyxl.styles import numbers
# use pre-defined values
ws.cell['T49'].number_format = numbers.FORMAT_GENERAL
ws.cell(row=2, column=4).number_format = numbers.FORMAT_DATE_XLSX15
# use strings
ws.cell['T57'].number_format = 'General'
ws.cell(row=3, column=5).number_format = 'd-mmm-yy'
ws.cell['E5'].number_format = '0.00'
ws.cell['E50'].number_format = '0.00%'
ws.cell['E100'].number_format = '_ * #,##0_ ;_ * -#,##0_ ;_ * "-"??_ ;_ @_ '