Trwałość danych - moduł Openpyxl
Microsoft Excel to najpopularniejsza aplikacja do obsługi arkuszy kalkulacyjnych. Jest używany od ponad 25 lat. Późniejsze wersje programu Excel używająOffice Open XML (OOXML) format pliku. W związku z tym był możliwy dostęp do plików arkuszy kalkulacyjnych za pośrednictwem innych środowisk programistycznych.
OOXMLto standardowy format plików ECMA. Pythonaopenpyxl Pakiet zapewnia funkcjonalność odczytu / zapisu plików Excel z rozszerzeniem .xlsx.
Pakiet openpyxl używa nazewnictwa klas podobnego do terminologii Microsoft Excel. Dokument programu Excel jest nazywany skoroszytem i jest zapisywany z rozszerzeniem .xlsx w systemie plików. Skoroszyt może zawierać wiele arkuszy. Arkusz zawiera dużą siatkę komórek, z których każda może przechowywać wartość lub formułę. Wiersze i kolumny tworzące siatkę są numerowane. Kolumny są identyfikowane za pomocą alfabetów, A, B, C,…., Z, AA, AB i tak dalej. Wiersze są numerowane począwszy od 1.
Typowy arkusz programu Excel wygląda następująco -
Narzędzie pip jest wystarczająco dobre, aby zainstalować pakiet openpyxl.
pip install openpyxl
Klasa Workbook reprezentuje pusty skoroszyt z jednym pustym arkuszem. Musimy go aktywować, aby niektóre dane mogły zostać dodane do arkusza.
from openpyxl import Workbook
wb=Workbook()
sheet1=wb.active
sheet1.title='StudentList'
Jak wiemy, komórka w arkuszu nosi nazwę w formacie ColumnNameRownumber. Odpowiednio, lewa górna komórka to A1. Przypisujemy ciąg do tej komórki jako -
sheet1['A1']= 'Student List'
Alternatywnie użyj arkusza roboczego cell()metoda, która wykorzystuje numer wiersza i kolumny do identyfikacji komórki. Wywołaj właściwość value do obiektu komórki, aby przypisać wartość.
cell1=sheet1.cell(row=1, column=1)
cell1.value='Student List'
Po wypełnieniu arkusza danymi skoroszyt jest zapisywany poprzez wywołanie metody save () obiektu skoroszytu.
wb.save('Student.xlsx')
Ten plik skoroszytu jest tworzony w bieżącym katalogu roboczym.
Poniższy skrypt w Pythonie zapisuje listę krotek w dokumencie skoroszytu. Każda krotka przechowuje numer rolki, wiek i oceny ucznia.
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')
Skoroszyt Students.xlsx jest zapisywany w bieżącym katalogu roboczym. Po otwarciu za pomocą aplikacji Excel wygląda jak poniżej -
Moduł openpyxl oferuje load_workbook() funkcja, która pomaga w odczytaniu danych w dokumencie skoroszytu.
from openpyxl import load_workbook
wb=load_workbook('students.xlsx')
Możesz teraz uzyskać dostęp do wartości dowolnej komórki określonej przez numer wiersza i kolumny.
cell1=sheet1.cell(row=1, column=1)
print (cell1.value)
Student List
Przykład
Poniższy kod wypełnia listę danymi arkusza roboczego.
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)
Wynik
[('RollNo', 'Name', 'age', 'marks'), (1, 'Juhi', 20, 100), (2, 'dilip', 20, 110), (3, 'jeevan', 24, 145)]
Bardzo ważną cechą programu Excel jest formuła. Aby przypisać formułę do komórki, przypisz ją do ciągu zawierającego składnię formuły programu Excel. Przypisz funkcję ŚREDNIA do komórki c6 mającej wiek.
sheet1['C6']= 'AVERAGE(C3:C5)'
Moduł Openpyxl ma Translate_formula()funkcja, aby skopiować formułę w zakresie. Poniższy program definiuje funkcję ŚREDNIA w C6 i kopiuje ją do C7, która oblicza średnią ocen.
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')
Zmieniony arkusz roboczy wygląda teraz następująco -