Для лучшей читабельности электронной таблицы .XLSX
иногда бывает нужно указать формат ячейки, представляющую дату (день, месяц, год), проценты, денежный формат и т.д. Модуль openpyxl
предоставляет такую возможность при помощи атрибута ячейки .number_format
.
Формат даты в ячейку, можно установить используя дату и время Python:
>>> import datetime >>> from openpyxl import Workbook >>> wb = Workbook() >>> ws = wb.active # установим формат ячейки как дата, # используя дату и время Python >>> ws['A1'] = datetime.date.today() >>> ws['A1'].number_format # 'yyyy-mm-dd' >>> ws['A2'] = datetime.datetime.now() >>> ws['A2'].number_format # 'yyyy-mm-dd h:mm:ss'
Во-первых, не каждого пользователя устроит формат даты, возвращаемый модулем Python datetime
. Во-вторых, как быть с денежным форматом или например с процентами?
Модуль openpyxl
предоставляет некоторые встроенные форматы ячеек в своем подмодуле openpyxl.styles.numbers
, в частности в словаре BUILTIN_FORMATS
.
Пример установки формата ячейки:
>>> from openpyxl.styles.numbers import BUILTIN_FORMATS # укажем, что ячейка будет иметь формат процентов >>> ws['A3'].number_format = BUILTIN_FORMATS[10] >>> ws['A3'] = 100
Что бы посмотреть все встроенные форматы ячеек, нужно просто распечатать словарь BUILTIN_FORMATS
.
>>> from openpyxl.styles.numbers import BUILTIN_FORMATS >>> for key, val in BUILTIN_FORMATS.items(): ... print(f'{key}: {val}') # 0: General # 1: 0 # 2: 0.00 # 3: #,##0 # 4: #,##0.00 # 5: "$"#,##0_);("$"#,##0) # 6: "$"#,##0_);[Red]("$"#,##0) ... # 14: mm-dd-yy ... # 37: #,##0_);(#,##0) # 38: #,##0_);[Red](#,##0) # 39: #,##0.00_);(#,##0.00) # 40: #,##0.00_);[Red](#,##0.00) ...
Как можно видеть, словарь со встроенными форматами BUILTIN_FORMATS
не содержит формата привычной нам даты ДД-ММ-ГГГГ
, а так же денежного формата в рублях. Но это не беда, ведь формат ячейки - это простой текст, который определяет правила форматирования ячейки электронные таблицы. Другими словами, этот текст заставляет программу Excel форматировать ячейку определенным образом. Например денежный формат в рублях будет выглядеть как то так: '# ###0,00 [$₽-419]'
Примеры составления и записи в ячейки собственных форматов:
# стандартный денежный формат >>> ws['A4'].number_format = '# ###0,00 [$₽-419]' >>> ws['A4'] = 8000000 # или >>> ws['A5'].number_format = '# ###0,00 [$RUR-419]' >>> ws['A5'] = 9000000 # денежный формат можно записать и так, отрицательные # значения будут автоматически выделятся красным >>> ws['A6'].number_format = '# ###0,00" руб.";[RED]-# ###0,00" руб."' >>> ws['B6'].number_format = '# ###0,00" руб.";[RED]-# ###0,00" руб."' >>> ws['A6'] = 900 >>> ws['B6'] = -90 # привычный формат даты можно записать так >>> ws['A7'].number_format = 'DD.MM.YYYY' # а еще даты можно записать так >>> ws['A8'].number_format = 'D MMM, YYYY' # или так >>> ws['A9'].number_format = 'D MMMM, YYYY' >>> ws['A10'].number_format = 'NN, D MMM, YY' >>> ws['A11'].number_format = 'NNNND MMMM, YYYY' # теперь время >>> ws['A12'].number_format = 'HH:MM:SS' >>> ws['A13'].number_format = 'HH:MM' # теперь вставим в ячейки дату >>> for row in range(7, 14): ... ws.cell(row, 1, datetime.datetime.now()) # сохраняем и смотрим что получилось >>> wb.save("cell_format.xlsx")
Еще можно открыть программу Excel, перейти на любую ячейку, выбрать нужный формат, а потом скопировать паттерн формата, который выдала программа. Вот и все.
Более подробно о составлении форматов ячеек читайте в документации к Microsoft Excel.