Сообщить об ошибке.

Объект ячейки Cell модуля openpyxl в Python

Основные атрибуты и методы объекта ячейки Cell

Объект ячейки 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.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")