Объект ячейки Cell
управляет отдельными ячейками электронной таблицы, а также описывает ее свойства. Класс Cell()
должен знать свое значение и тип, параметры отображения и любые другие функции ячейки Excel.
Не создавайте объекты ячейки самостоятельно. Доступ к произвольной ячейке можно получить, обратившись к объекту рабочего листа Worksheet
как к словарю, при этом ключом будет служить строка с именем ячейки, например ws['A1']
. Это вернет ячейку на 'A4'
или создаст ее, если она еще не существует. Значения могут быть присвоены напрямую:
>>> from openpyxl import Workbook >>> wb = Workbook() >>> ws = wb.active >>> ws['A4'] = 5 >>> ws['A4'].value # 5 # присваивание значений >>> ws['A4'].value = ws['A4'].value * 2 >>> ws['A4'].value # 10
Для доступа к ячейке с использованием индексов столбцов и строк, можно использовать метод Worksheet.cell()
.
Пример работы с объектом ячейки через переменную:
# доступ к объекту ячейки >>> cell = ws.cell(row=4, column=2) # доступ с присваиваем значения ячейки >>> cell = ws.cell(row=4, column=2, value=10) >>> cell.value # 10 # присваивание значений >>> cell.value *= 2 >>> cell.value # 20
Cell.base_date
базовый класс обработки даты,Cell.check_error()
проверяет правильность кодировка строки,Cell.col_idx
числовой индекс столбца,Cell.column
номер столбца этой ячейки,Cell.column_letter
возвращает букву столбца ячейки,Cell.comment
возвращает/назначает объект комментария,Cell.coordinate
возвращает координаты этой ячейки,Cell.encoding
возвращает кодировку этой ячейки,Cell.hyperlink
устанавливает гиперссылку,Cell.is_date
проверяет значение ячейки на дату,Cell.offset()
смещенный объект ячейки,Cell.parent
объект рабочего листа,Cell.row
номер строки этой ячейки,Cell.value
возвращает/устанавливает значение в ячейку,Cell.alignment
выравнивает значения в ячейке,Cell.font
стиль шрифта ячейки,Cell.border
стиль оформления границ ячейки,Cell.fill
цвет заливки ячейки.Cell.base_date
:Свойство Cell.base_date
содержит базовый класс обработки даты. По умолчанию это datetime
.
Cell.check_string(value)
:Метод Cell.check_string()
проверяет правильность кодировка строки, а также ее допустимой длины и символ разрыва строки.
Cell.col_idx
:Атрибут Cell.col_idx
возвращает числовой индекс столбца. Нумерация столбцов в модуле openpyxl
начинается с 1, а не с 0 как в списке.
>>> ws['C4'].col_idx # 3
Cell.column
:Атрибут Cell.column
возвращает номер столбца этой ячейки. Нумерация столбцов в модуле openpyxl
начинается с 1, а не с 0 как в списке.
>>> ws['C4'].column # 3
Cell.column_letter
:Атрибут Cell.column_letter
возвращает букву столбца ячейки.
>>> ws['C4'].column_letter # 'C'
Cell.comment
:Атрибут Cell.comment
возвращает/назначает объект комментария Comment
, связанный с этой ячейкой. Объект комментария содержит текстовый атрибут и атрибут автора, которые должны быть установлены.
Если назначить один и тот же комментарий нескольким ячейкам, то openpyxl
автоматически создаст копии.
>>> from openpyxl import Workbook >>> from openpyxl.comments import Comment >>> wb=Workbook() >>> ws=wb.active >>> comment = Comment("Text", "Author") >>> ws["A1"].comment = comment >>> ws["A1"].comment.text # 'Text' >>> ws["A1"].comment.author # 'Author' # присвоим этот же комментарий другой ячейке >>> ws["B2"].comment = comment >>> ws["A1"].comment is comment # True >>> ws["B2"].comment is comment # False
Cell.coordinate
:Атрибут Cell.coordinate
возвращает координаты этой ячейки.
>>> ws['C4'].coordinate # 'C4'
Cell.encoding
:Атрибут Cell.encoding
возвращает кодировку этой ячейки.
>>> ws['C4'].encoding # 'utf-8'
Cell.hyperlink
:Свойство Cell.hyperlink
устанавливает целевую гиперссылку.
ws['A1'].hyperlink = 'https://docs-python.ru/' ws['A1'].value = 'Справочник Python' ws['A1'].style = 'Hyperlink'
Некоторые говорят что код, представленный выше - не работает. В таком случае установить ссылку в ячейку можно используя встроенную в Excel функцию '=HYPERLINK(link, linkName)`, например:
>>> link = 'https://docs-python.ru/' >>> link_name = 'Справочник Python' >>> ws.cell(row=2, column=1).value = f'=HYPERLINK("{link}", "{link_name}")'
Cell.is_date
:Свойство Cell.is_date
возвращает True
, если значение отформатировано как дата.
>>> ws['C4'].value = 10 >>> ws['C4'].is_date # False >>> import datetime >>> now = datetime.datetime.now() >>> ws['C4'].value = now >>> ws['C4'].is_date # True
Cell.offset(row=0, column=0)
:Метод Cell.offset()
возвращает объект ячейки, смещенный на кол-во строк row
и столбцов column
относительно этой ячейки.
Аргументы:
row
- количество смещения строк.column
- количество смещения столбцов.>>> ws['C4'].offset(row=1, column=0) # <Cell 'Sheet'.C5>
Cell.parent
:Свойство Cell.parent
возвращает объект рабочего листа, на котором расположена эта ячейка.
>>> ws['C4'].parent # <Worksheet "Sheet">
Cell.row
:Свойство Cell.row
возвращает номер строки этой ячейки. Нумерация строк в модуле openpyxl
начинается с 1, а не с 0 как в списке.
>>> ws['C4'].row # 4
Cell.value
:Свойство Cell.value
возвращает или устанавливает значение, хранящееся в ячейке.
Ячейка может хранить следующие значения: str
, float
, int
или datetime.datetime
.
>>> ws['C4'].value = 100500 >>> ws['C4'].value # 100500
Cell.alignment
:Свойство Cell.alignment
отвечает за выравнивание значения в ячейке. Значение должно быть объектом Alignment()
.
>>> from openpyxl import Workbook >>> from openpyxl.styles import Alignment >>> wb = Workbook() >>> ws = wb.active >>> ws['A1'].value = 1500 >>> ws['A2'].value = 1500 >>> ws['A3'].value = 1500 # выравниваем текст в ячейках стилями >>> ws['A1'].alignment = Alignment(horizontal='left') >>> ws['A2'].alignment = Alignment(horizontal='center') >>> ws['A3'].alignment = Alignment(horizontal='right') # сохраняем и смотрим что получилось >>> wb.save('test.xlsx')
Cell.font
:Свойство Cell.font
задает стиль шрифта в ячейке (имя, высота, цвет и т.д.). Значение должно быть объектом Font()
.
>>> from openpyxl import Workbook >>> from openpyxl.styles import Font >>> wb = Workbook() >>> ws = wb.active >>> a1 = ws['A1'] >>> a1.value = 'Ячейка `A1`' >>> a1.font = Font(size=12) # можно напрямую >>> ws['A2'].value = 'Ячейка `A2`' >>> ws['A2'].font = Font(name= 'Arial', size=12, bold=True, color='00FF00') # сохраняем и смотрим что получилось >>> wb.save('test.xlsx')
Cell.border
:Свойство Cell.border
задает стиль оформления границ ячейки. Значение должно быть объектом Border()
.
Пример стилизации границ одной ячейки:
>>> from openpyxl import Workbook >>> from openpyxl.styles import Border, Side >>> wb = Workbook() >>> ws = wb.active >>> cell = ws['B2'] # установить высоту строки >>> ws.row_dimensions[2].height = 30 # установить ширину столбца >>> ws.column_dimensions['B'].width = 40 # определим стили сторон >>> thins = Side(border_style="medium", color="0000ff") >>> double = Side(border_style="dashDot", color="ff0000") # рисуем границы >>> cell.border = Border(top=double, bottom=double, left=thins, right=thins) >>> wb.save("test.xlsx")
Cell.fill
:Свойство Cell.fill
задает цвет заливки ячейки. Значение должно быть объектом PatternFill()
.
>>> from openpyxl import Workbook >>> from openpyxl.styles import PatternFill >>> wb = Workbook() >>> ws = wb.active >>> a1 = ws['A1'] >>> a1.value = 'Ячейка `A1`' >>> a1.fill = PatternFill('solid', fgColor="ff0000") >>> wb.save("test.xlsx")