Openpyxl – czyli Excel w Python’ie #2: Odczyt danych
W tej części serii poświęconej bibliotece openpyxl (która pozwala na pracę z plikami Excel), zajmę się odczytem danych z istniejącego pliku. Możliwe, że będziesz tworzył pliki konfiguracyjne na podstawie Excel’i dostarczanych przez klienta, lub zaciągał dane bezpośrednio do testów. Umożliwi ci to w prosty sposób bibliotek openpyxl.
W tej części serii poświęconej bibliotece openpyxl (która pozwala na pracę z plikami Excel), zajmę się odczytem danych z istniejącego pliku. Możliwe, że będziesz tworzył pliki konfiguracyjne na podstawie Excel’i dostarczanych przez klienta, lub zaciągał dane bezpośrednio do testów. Umożliwi ci to w prosty sposób biblioteka openpyxl.
Odczyt pliku
Jak w poprzedniej części zacznijmy od zaimportowania biblioteki, zdefiniowania nowego skoroszytu (Workbook) i przypisaniem do niego aktywnego arkusza (Sheet). Jednak tym razem będziemy używać zewnętrznego, wcześniej przygotowanego pliku (excel_test.xlsx). Natomiast sam skoroszyt wczytamy za pomocą load_workbook
from openpyxl import load_workbook
wb = load_workbook('excel_test.xlsx')
sheet = wb.active
Na potrzeby artykułu, przygotowany arkusz nie będzie zawiły i rozbudowany – jak to zazwyczaj bywa w przypadku codziennej pracy. Myślę jednak , że będzie on wystarczającym przykładem jak dobrać się do danych w Excel’u:
Jak w przypadku zapisu, odczyt pojedynczej komórki może odbywać się na dwa sposoby. Wybierając trajektoria jak w Excel’u lub podając kolumnę i wiersz komórki, którą chcemy odczytać. Wartość jest dostępna pod zmienną value należącą do klasy sheet:
sheet['A1'].value
sheet.cell(row=1, column=1).value
Odczyt wielu komórek
Odczyt wielu komórek możemy rozwiązać za pomocą metody inter_rows. Poniższy kod pokazuje jak odczytać tabelę z poprzedniego przykładu. Jako argumenty podajemy minimalne i maksymalne wartości kolumn i wierszy, dzięki czemu wiemy, jaki obszar ma zostać odczytany:
for row in sheet.iter_rows(min_row=1, min_col=1, max_row=6, max_col=2):
for cell in row:
print(cell.value)
Często będziesz potrzebował również wybrać arkusz, na którym chcesz pracować, za pomocą nazwy:
sheet = wb.get_sheet_by_name("nazwa")
Ale skąd wiadomo, jaki wybrać. Rozwiązaniem tego może być wylisotwanie wszystkich dostępnych arkuszy za pomocą metody get_sheet_names:
print(wb.get_sheet_names())
Formuły w arkuszu
Uzupełnieniem zapisu opisanego w poprzedniej części serii „Openpyxl – czyli Excel w Python’ie” są formuły. Często może się zdarzyć, że będziemy musieli dodać do wybranej komórki formułę, wystarczy zmienić jej value i oczywiście zapisać do pliku, aby zobaczyć efekt:
cell_1 = sheet['A7']
cell_1.value = "=SUM(A4:A6)"
Tak przygotowany wgryziesz się w każdy możliwy arkusz, który zostanie ci dostarczony do ‚obrabiania’ i ‚wypluwania’ kolejnych, i kolejnych i kolejnych Excel’i.