Установите openpyxl с помощью pip. Желательно делать это в виртуалке Python без системных пакетов:
pip install openpyxl
Примечание
Существует поддержка популярной библиотеки lxml , которая будет использоваться, если она установлена. Это особенно полезно при создании больших файлов.
Предупреждение
Чтобы иметь возможность включать изображения (jpeg, png, bmp,…) в файл openpyxl, вам также понадобится библиотека «pillow», которую можно установить с помощью:
pip install pillow
или просмотрите https://pypi.python.org/pypi/Pillow/ , выберите последнюю версию и перейдите к нижней части страницы для двоичных файлов Windows.
Создать книгу
Нет необходимости создавать файл в файловой системе, чтобы начать работу с openpyxl.
Просто импортируйте Workbook
класс и начните работу:
from openpyxl import Workbook wb = Workbook()
Рабочая книга всегда создается как минимум с одним рабочим листом.
Вы можете получить его, используя Workbook.active
свойство:
ws = wb.active
Примечание
По умолчанию установлено значение 0. Если вы не измените его значение, вы всегда будете получать первый рабочий лист, используя этот метод.
Вы можете создавать новые рабочие листы, используя Workbook.create_sheet()
метод:
ws1 = wb.create_sheet("Mysheet") # вставить в конце (по умолчанию) # или ws2 = wb.create_sheet("Mysheet", 0) # вставить в первое положение # или ws3 = wb.create_sheet("Mysheet", -1) # вставить в предпоследнее положение
Листам автоматически присваивается имя при создании.
Они нумеруются последовательно (Лист, Лист1, Лист2, …).
Вы можете изменить это имя в любое время с помощью Worksheet.title
свойства:
ws.title = "New Title"
Как только вы дали рабочему листу имя, вы можете получить его как ключ книги:
ws3 = wb["New Title"]
Вы можете просмотреть имена всех рабочих листов книги с помощью Workbook.sheetname
атрибута
print(wb.sheetnames) ['Sheet2', 'New Title', 'Sheet1']
Вы можете прокручивать рабочие листы
for sheet in wb: ... print(sheet.title)
Вы можете создавать копии рабочих листов в одной книге :
Workbook.copy_worksheet()
метод:
source = wb.active target = wb.copy_worksheet(source)
Примечание
Копируются только ячейки (включая значения, стили, гиперссылки и комментарии) и определенные атрибуты рабочего листа (включая размеры, формат и свойства).
Все остальные атрибуты книги/листа не копируются, например, изображения, диаграммы.
Вы также не можете копировать листы между книгами. Вы не можете скопировать рабочий лист, если рабочая книга открыта в режиме только для чтения или только для записи .
Пример:
from openpyxl import Workbook
wb = Workbook()
#захватите активный рабочий лист
ws = wb.active
#Данные могут быть назначены непосредственно ячейкам
ws[‘A1’] = 42
#Строки также могут быть добавлены
ws.append([1, 2, 3])
#Типы Python будут автоматически преобразованы
import datetime
ws[‘A2’] = datetime.datetime.now()
#Сохраните файл
wb.save(“sample2.xlsx”)
Игра с данными
Доступ к одной ячейке
Теперь, когда мы знаем, как получить рабочий лист, мы можем начать изменять содержимое ячеек. К ячейкам можно обращаться непосредственно как к ключам рабочего листа:
c = ws['A4']
Это вернет ячейку на A4 или создаст ее, если она еще не существует.
Значения могут быть присвоены напрямую (ячейке А4 присвоенно значение 4):
ws[‘A4’] = 4
Есть еще Worksheet.cell()
метод.
Это обеспечивает доступ к ячейкам с использованием записи строк и столбцов:
d = ws.cell(row=4, column=2, value=10)
Примечание:
Когда рабочий лист создается в памяти, он не содержит ячеек . Они создаются при первом доступе.
Предупреждение!
Из-за этой функции прокрутка ячеек вместо прямого доступа к ним создаст их все в памяти, даже если вы не присвоите им значение.
Что-то вроде
for x in range(1,101): ... for y in range(1,101): ... ws.cell(row=x, column=y)
создаст в памяти 100×100 ячеек, даром.
Создаём новый файл:
from openpyxl import Workbook import time book = Workbook() sheet = book.active sheet['A1'] = 56 sheet['A2'] = 43 now = time.strftime("%x") sheet['A3'] = now book.save("sample.xlsx")
В примере мы создаем новый файл xlsx. Записываем данные в три ячейки.
from openpyxl import Workbook
Мы импортируемWorkbook
класс изopenpyxl
модуля. Рабочая книга является контейнером для всех остальных частей документа.
book = Workbook()
Создается новая рабочая книга. Рабочая книга всегда создается как минимум с одним рабочим листом.
sheet = book.active
Получаем ссылку на активный лист со active
свойством.
sheet['A1'] = 56 sheet['A2'] = 43
Записываем числовые данные в ячейки А1 и А2.
now = time.strftime("%x") sheet['A3'] = now
Записываем текущую дату в ячейку A3.
book.save("sample.xlsx")
Записываем содержимое в sample.xlsx
файл методом save
.
Openpyxl пишет в ячейку
Существует два основных способа записи в ячейку: с помощью ключа рабочего листа, такого как A1 или D3, или с использованием нотации строк и столбцов с помощью метода cell
.
from openpyxl import Workbook book = Workbook() sheet = book.active sheet['A1'] = 1 sheet.cell(row=2, column=2).value = 2 book.save('write2cell.xlsx')
В примере мы записываем два значения в две ячейки.
sheet['A1'] = 1
Здесь мы присваиваем числовое значение ячейке A1.
sheet.cell(row=2, column=2).value = 2
В этой строке мы пишем в ячейку B2 с обозначением строки и столбца.
Openpyxl добавляет значения
С помощью этого append
метода мы можем добавить группу значений внизу текущего листа.
from openpyxl import Workbook book = Workbook() sheet = book.active rows = ( (88, 46, 57), (89, 38, 12), (23, 59, 78), (56, 21, 98), (24, 18, 43), (34, 15, 67) ) for row in rows: sheet.append(row) book.save('appending.xlsx')
В примере мы добавляем три столбца данных в текущий лист.
rows = ( (88, 46, 57), (89, 38, 12), (23, 59, 78), (56, 21, 98), (24, 18, 43), (34, 15, 67) )
Данные хранятся в кортеже кортежей.
for row in rows: sheet.append(row)
Проходим по контейнеру построчно и вставляем строку данных с методом append
.
Ячейка чтения Openpyxl
В следующем примере мы читаем ранее записанные данные из sample.xlsx
файла.
import openpyxl book = openpyxl.load_workbook('sample.xlsx') sheet = book.active a1 = sheet['A1'] a2 = sheet['A2'] a3 = sheet.cell(row=3, column=1) print(a1.value) print(a2.value) print(a3.value)
Файл открывается методом load_workbook
.
book = openpyxl.load_workbook('sample.xlsx')
Здесь указано название файла sample.xlsx, если питоновский файл находится там же.
Если нобходимо указать путь к файлу.
В системах Windows: сначала необходимо скопировать путь, например этот путь:C:\Users\obada yahya\Desktop\python
Теперь вы должны добавить еще один \
после каждого уже существующего \
пути:
В примере загружается существующий файл xlsx и считываются три ячейки.
a1 = sheet['A1'] a2 = sheet['A2'] a3 = sheet.cell(row=3, column=1)
Читаем содержимое ячеек A1, A2 и A3.
В третьей строке мы используем cell
метод для получения значения ячейки A3.
Значение полученное с ячеек мы сохраняем в переменные а1, а2, а3.
Полезная ссылка