Измените стиль всех ячеек с помощью openpyxl

Я использую openpyxl 2.0.3 с python2.7.

Есть ли способ применить стиль к каждой ячейке листа? Допустим, я хочу изменить шрифт всех ячеек, подобно тому, как я открываю документ Excel, нажимаю ctrl+a, щелкаю правой кнопкой мыши и меняю формат.


person Mike    schedule 23.05.2014    source источник


Ответы (2)


Нет способа сделать это. На данный момент лучшим подходом, вероятно, было бы установить стиль для всех соответствующих столбцов или строк.

style = Style(…)
for col in 'ABCD':
     ws._styles['A'] = style

Думаю, мы будем работать над улучшением стилей обработки в следующих релизах.

person Charlie Clark    schedule 26.05.2014
comment
Примечание: ws._styles должен индексировать столбец вместо A. - person denvar; 19.09.2016
comment
Хорошо?! Вопрос, безусловно, остается актуальным: как применить стиль к каждой ячейке листа. Собственно, вчера я искал ответ именно на этот вопрос. Кроме того, вполне возможно, что кто-то даже сегодня будет иметь подобную настройку программного обеспечения. Вывод: Заметка не помешает. - person denvar; 19.09.2016
comment
Примечание основано на частном API, который больше недоступен и в любом случае никогда бы не работал из-за того, как стили для строк и столбцов реализованы в OOXML. - person Charlie Clark; 20.09.2016

Я понимаю, что этот вопрос эффективно меняет шрифт листа (книги?) по умолчанию. По сути, это то же самое, что мне нужно изменить шрифт по умолчанию, чтобы он соответствовал другим документам Excel. Есть много подобных вопросов об изменении шрифта на основе ячейки или столбца:

  1. 21 июля 2011 г. - Использовать openpyxl для редактирования файла Excel2007 (.xlsx) без изменения его собственных стилей?
  2. 09.12.2011 – Настройка стилей в Openpyxl
  3. 2014-05-23 - Измените стиль всех ячеек с помощью openpyxl
  4. 20 04 2017 – Форматирование шрифтов и выравнивание
  5. 07.03.2018 - Как изменить размер шрифта в Python OpenPyXL
  6. 04.05.2018 - Стиль настройки Python и размер шрифта в Excel

Этот прием заключается в изменении шрифта рабочей книги по умолчанию. Ясно, что это не поддерживается API, но я рад переопределить пакет. Я начал с поиска шрифта Calibri, который я не использую на своем компьютере:

Две строки в ..\openpyxl\styles\__init__.py выглядят уместно:

from .fonts import Font, DEFAULT_FONT
from .named_styles import NamedStyle

Изменение в fonts.py:

# Hack default font
# DEFAULT_FONT = Font(name="Calibri", sz=11, family=2, b=False, i=False,
DEFAULT_FONT = Font(name="Calibri", sz=10, family=2, b=False, i=False,
                    color=Color(theme=1), scheme="minor")

Другие места, на которые стоит обратить внимание: named_styles.py, stylesheet.py, styleable.py, theme.py и workbook.py.

Я был бы признателен за любой совет, чтобы привести в порядок константу в fonts.py, вызываемую из __init__.py.

person flywire    schedule 06.05.2018
comment
Как насчет того, чтобы импортировать DEFAULT_FONT и заменить его чем-то вроде DEFAULT_FONT.name = "Arial"? Я только что сделал это, это работает (openpyxl 3.0.7, Python 3.6). - person David Guillot; 07.07.2021
comment
Отлично, похоже, теперь он работает намного лучше. Пожалуйста, предоставьте ответ с небольшой демонстрацией. - person flywire; 08.07.2021