В материале рассказывается о методах модуля openpyxl
, которые отвечают за такие свойства электронной таблицы как объединение/разъединение ячеек таблицы, а также особенности стилизации объединенных ячеек.
openpyxl
.openpyxl
.Модуль openpyxl
поддерживает слияние/объединение нескольких ячеек, что очень удобно при записи в них текста, с последующим выравниванием. При слиянии/объединении ячеек, все ячейки, кроме верхней левой, удаляются с рабочего листа. Для переноса информации о границах объединенной ячейки, граничные ячейки объединенной ячейки, создаются как ячейки слияния, которые всегда имеют значение None
.
Информацию о форматировании объединенных ячеек смотрите ниже, в подразделе "Оформление объединенных ячеек".
Пример слияния/объединения ячеек с модулем openpyxl
:
>>> from openpyxl import Workbook >>> wb = Workbook() >>> ws = wb.active # объединить ячейки, находящиеся # в диапазоне `B2 : E2` >>> ws.merge_cells('B2:E2') # записываем текст в оставшуюся # после объединения ячейку 'B2' >>> ws['B2'] = 'Объединенные ячейки `B2 : E2`' # сохраняем документ и смотрим что получилось >>> wb.save("merge.xlsx")
При открытии сохраненного документа и перехода по любой ячейки из диапазона 'B2:E2'
видно, что этот диапазон ячеек стал единым. Дополнительно исчезла возможность добавить значения к другим ячейкам этого диапазона.
Теперь разъединим ячейки, которые были объединены ранее, для этого загрузим сохраненный документ.
Пример разъединения ячеек с модулем openpyxl
:
>>> from openpyxl import load_workbook # загружаем сохраненный документ >>> wb = load_workbook(filename = 'merge.xlsx') >>> ws = wb.active # теперь разъединим ячейки, # в диапазоне `B2 : E2` >>> ws.unmerge_cells('B2:E2') # сохраняем документ и смотрим что получилось >>> wb.save("merge.xlsx")
При открытии сохраненного документа и перехода по любой ячейки из диапазона 'B2:E2'
видно, что текст, записанный ранее в ячейку 'B2'
принадлежит только ей. Дополнительно появилась возможность добавить значения к другим ячейкам диапазона 'B2:E2'
.
Методы слияния ws.merge_cells()
и разъединения ws.unmerge_cells()
ячеек, кроме диапазона/среза ячеек могут принимать аргументы:
start_row
: строка, с которой начинается слияние/разъединение.start_column
: колонка, с которой начинается слияние/разъединение.end_row
: строка, которой заканчивается слияние/разъединение.end_column
: колонка, которой заканчивается слияние/разъединение.Пример:
# объединение ячеек >>> ws.merge_cells(start_row=2, start_column=2, end_row=4, end_column=6) # посмотрите что получилось >>> wb.save("merge.xlsx") # и разъединение ячеек >>> ws.unmerge_cells(start_row=2, start_column=2, end_row=4, end_column=6)
openpyxl
.Объединенная ячейка ведет себя аналогично другим объектам ячеек. Различие заключается лишь в том, что ее значение и формат записываются в левой верхней ячейке. Чтобы изменить, например, границу всей объединенной ячейки, необходимо изменить границу ее левой верхней ячейки.
Пример форматирования объединенной ячейки:
>>> from openpyxl import Workbook >>> from openpyxl.styles import Border, Side, PatternFill, Font, Alignment >>> wb = Workbook() >>> ws = wb.active # объединим ячейки в диапазоне `B2:E2` >>> ws.merge_cells('B2:E2') # в данном случае крайняя верхняя-левая ячейка это `B2` >>> megre_cell = ws['B2'] # запишем в нее текст >>> megre_cell.value = 'Объединенные ячейки `B2 : E2`' # установить высоту строки >>> ws.row_dimensions[2].height = 30 # установить ширину столбца >>> ws.column_dimensions['B'].width = 40 # определим стили границ >>> thins = Side(border_style="thin", color="0000ff") >>> double = Side(border_style="double", color="ff0000") # НАЧИНАЕМ ФОРМАТИРОВАНИЕ: # границы объединенной ячейки >>> megre_cell.border = Border(top=double, left=thins, right=thins, bottom=double) # заливка ячейки >>> megre_cell.fill = PatternFill("solid", fgColor="DDDDDD") # шрифт ячейки >>> megre_cell.font = Font(bold=True, color="FF0000", name='Arial', size=14) # выравнивание текста >>> megre_cell.alignment = Alignment(horizontal="center", vertical="center") # сохраняем и смотрим что получилось >>> wb.save("styled_megre.xlsx")
Дополнительно смотрите:
openpyxl
.openpyxl
.