Аналитика данных: Работа с Excel

Установите 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.

Полезная ссылка