Существует обходной путь, который не отвечает на вопрос, но может помочь решить проблему.
- Установка формата в некоторых заданных ячейках (например, на листе под названием «СТИЛИ») *
- Извлечение всех стилей и регистрация их с помощью
openpyxl
- Использование стилей с их именами
В Excel , что даст что-то вродеэто:
В Python , вы можете добавить следующую функцию и вызвать ее:
from copy import copy
import logging
from openpyxl.styles import NamedStyle
from openpyxl.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from typing import Dict
def _register_styles(wb:Workbook, ws_style: Worksheet) -> Dict[str, NamedStyle]:
"""Parse a column of cells and register the styles
(the style names are the values of cells)
Args:
wb: The workbook
ws_style: The worksheet with the styles defined
Returns:
Dictionary of styles, by names
"""
list_styles = dict() # type: Dict[str, NamedStyle]
# Register styles of a config cells
col, row = "A", 2
cell = ws_style[col + str(row)] # or in Python 3.6+: f"{col}{row}"
while cell.value:
style = NamedStyle(name=cell.value)
style.font = copy(cell.font)
style.fill = copy(cell.fill)
style.border = copy(cell.border)
style.alignment = copy(cell.alignment)
style.number_format = copy(cell.number_format)
try:
wb.add_named_style(style)
except ValueError as e:
logging.warning("W006: style creation skipped because {}".format(e))
list_styles[cell.value] = style
row += 1
cell = ws_style[col + str(row)] # or in Python 3.6+: f"{col}{row}"
return list_styles
wb = load_workbook("My_Template.xlsx")
_register_styles(wb, wb["STYLES"])
ПРИМЕЧАНИЕ: если вы используете Python до версии 3.4, просто удалите подсказки типа в начале прототипа функции: def _register_styles(wb, ws_style):