Модуль openpyxl
поддерживает создание, так называемых, таблиц рабочего листа (объекты openpyxl.worksheet.table.Table()
) которые являются ссылками на группы ячеек. На рабочем листе таких таблиц может быть несколько. Работа с объектами таблиц облегчает некоторые операции, такие как оформление/стилизация ячеек в определенной таблице на листе, задание формата и т.д.
Table()
.Создание объекта таблицы рабочего листа происходит посредствам создания экземпляра класса Table()
. Имена таблиц должны быть уникальными в пределах всей рабочей книги.
Созданный объект таблицы должен быть добавлен с использованием метода Worksheet.add_table()
. Использование этого метода гарантирует, что имя таблицы будет уникальным для определенных имен и всех других имен таблиц, так как поднимает исключение ValueError: Table with name ... already exists
в случае совпадения имени.
Перед созданием объекта таблицы рабочего листа, что бы не получить исключение в момент ее добавления на рабочий лист, лучше проверить имя на уникальность (аргумент displayName
конструктора Table()
).
Смотрим пример:
from openpyxl import Workbook from openpyxl.worksheet.table import Table, TableStyleInfo wb = Workbook() ws = wb.active data = [ ['Apples', 10000, 5000, 8000, 6000], ['Pears', 2000, 3000, 4000, 5000], ['Bananas', 6000, 6000, 6500, 6000], ['Oranges', 500, 300, 200, 700], ] # добавим заголовки столбцов. Это должны быть строки ws.append(["Fruit", "2011", "2012", "2013", "2014"]) for row in data: ws.append(row) # создаем объект таблицы if not ws.tables.get('Table1'): table = Table(displayName="Table1", ref="A1:E5") # добавим стиль по умолчанию. style = TableStyleInfo(name="TableStyleMedium9", showFirstColumn=False, showLastColumn=False, showRowStripes=True, showColumnStripes=True) table.tableStyleInfo = style # добавляем таблицу ws.add_table(table) wb.save("table.xlsx")
По умолчанию, таблицы создаются с заголовком, которые берутся из первой строки и фильтрами для всех столбцов, а заголовки таблиц и заголовки столбцов всегда должны быть строками.
Предупреждение. В режиме только для записи, необходимо вручную добавлять заголовки столбцов в таблицы, а значения всегда должны совпадать со значениями соответствующих ячеек (пример как это сделать), в противном случае Excel может посчитать файл недействительным и удалить таблицу.
Примечание. Управление стилями осуществляется с помощью объекта TableStyleInfo()
. Этот объект позволяет чередовать строки или столбцы (аргументы: showFirstColumn
, showLastColumn
, showRowStripes
, showColumnStripes
) и применять различные цветовые схемы (аргумент name
).
Свойство рабочего листа ws.tables
- это объект похожий на словарь, который содержит все объекты таблиц Table()
на конкретном рабочем листе:
>>> ws.tables # {"Table1", <openpyxl.worksheet.table.Table object>}
# получение объекта таблицы по имени >>> ws.tables["Table1"] # или диапазону >>> ws.tables["A1:D10"]
>>> for table in ws.tables.values(): ... print(table)
(имя, диапазон)
всех таблиц на листе.Метод объекта Table.items()
возвращает список кортежей (name, range)
, где name
- это имя, а range
- диапазон таблицы текущего рабочего листа.
>>> ws.tables.items() # [("Table1", "A1:D10")]
>>> del ws.tables["Table1"]
>>> len(ws.tables) # 1
В режиме только для записи можно добавлять таблицы только без заголовков:
>>> table.headerRowCount = False
В обычном режиме работы с XLSX можно инициализировать заголовки столбцов вручную:
# все значения заголовков таблицы должны быть строками >>> headings = ["Fruit", "2011", "2012", "2013", "2014"] >>> table._initialise_columns() >>> for column, value in zip(table.tableColumns, headings): ... column.name = value