Сохранение данных - модуль Openpyxl

Microsoft Excel - самое популярное приложение для работы с электронными таблицами. Он используется уже более 25 лет. Более поздние версии Excel используютOffice Open XML (OOXML) формат файла. Следовательно, стало возможно получить доступ к файлам электронных таблиц через другие среды программирования.

OOXML- это стандартный формат файла ECMA. Pythonopenpyxl Пакет предоставляет функциональные возможности для чтения / записи файлов Excel с расширением .xlsx.

В пакете openpyxl используется номенклатура классов, аналогичная терминологии Microsoft Excel. Документ Excel называется книгой и сохраняется в файловой системе с расширением .xlsx. В книге может быть несколько листов. Рабочий лист представляет собой большую сетку ячеек, каждая из которых может хранить либо значение, либо формулу. Строки и столбцы, образующие сетку, нумеруются. Столбцы обозначаются алфавитами: A, B, C,…., Z, AA, AB и так далее. Строки нумеруются, начиная с 1.

Типичный рабочий лист Excel выглядит следующим образом -

Утилита pip достаточно хороша для установки пакета openpyxl.

pip install openpyxl

Класс Workbook представляет собой пустую книгу с одним пустым листом. Нам нужно активировать его, чтобы некоторые данные можно было добавить на рабочий лист.

from openpyxl import Workbook
wb=Workbook()
sheet1=wb.active
sheet1.title='StudentList'

Как мы знаем, ячейка на листе называется в формате ColumnNameRownumber. Соответственно, верхняя левая ячейка - это A1. Мы присваиваем этой ячейке строку как -

sheet1['A1']= 'Student List'

В качестве альтернативы используйте рабочий лист cell()метод, который использует номер строки и столбца для идентификации ячейки. Вызовите свойство value для объекта ячейки, чтобы присвоить значение.

cell1=sheet1.cell(row=1, column=1)
cell1.value='Student List'

После заполнения рабочего листа данными, книга сохраняется путем вызова метода save () объекта книги.

wb.save('Student.xlsx')

Этот файл книги создается в текущем рабочем каталоге.

Следующий сценарий Python записывает список кортежей в документ книги. В каждом кортеже хранятся номер списка, возраст и оценки ученика.

from openpyxl import Workbook
wb = Workbook()
sheet1 = wb.active
sheet1.title='Student List'
sheet1.cell(column=1, row=1).value='Student List'
studentlist=[('RollNo','Name', 'age', 'marks'),(1,'Juhi',20,100), 
   (2,'dilip',20, 110) , (3,'jeevan',24,145)]
for col in range(1,5):
   for row in range(1,5):
      sheet1.cell(column=col, row=1+row).value=studentlist[row-1][col-1]
wb.save('students.xlsx')

Рабочая тетрадь student.xlsx сохраняется в текущем рабочем каталоге. Если открыть с помощью приложения Excel, он выглядит следующим образом:

Модуль openpyxl предлагает load_workbook() функция, которая помогает при чтении данных в документе книги.

from openpyxl import load_workbook
wb=load_workbook('students.xlsx')

Теперь вы можете получить доступ к значению любой ячейки, указанной номером строки и столбца.

cell1=sheet1.cell(row=1, column=1)
print (cell1.value)
Student List

пример

Следующий код заполняет список данными рабочего листа.

from openpyxl import load_workbook
wb=load_workbook('students.xlsx')
sheet1 = wb['Student List']
studentlist=[]
for row in range(1,5):
   stud=[]
for col in range(1,5):
   val=sheet1.cell(column=col, row=1+row).value
stud.append(val)
studentlist.append(tuple(stud))
print (studentlist)

Вывод

[('RollNo', 'Name', 'age', 'marks'), (1, 'Juhi', 20, 100), (2, 'dilip', 20, 110), (3, 'jeevan', 24, 145)]

Одна очень важная особенность приложения Excel - это формула. Чтобы назначить формулу ячейке, назначьте ее строке, содержащей синтаксис формулы Excel. Назначьте функцию СРЕДНЕЕ возрастной клетке c6.

sheet1['C6']= 'AVERAGE(C3:C5)'

Модуль Openpyxl имеет Translate_formula()функция для копирования формулы в диапазоне. Следующая программа определяет функцию AVERAGE в C6 и копирует ее в C7, который вычисляет среднее значение оценок.

from openpyxl import load_workbook
wb=load_workbook('students.xlsx')

sheet1 = wb['Student List']
from openpyxl.formula.translate import Translator#copy formula
sheet1['B6']='Average'
sheet1['C6']='=AVERAGE(C3:C5)'
sheet1['D6'] = Translator('=AVERAGE(C3:C5)', origin="C6").translate_formula("D6")
wb.save('students.xlsx')

Измененный рабочий лист теперь выглядит следующим образом -