Praca z excelami w Pythonie

Business Case:

Wielu użytkowników organizacji posiada swój własny folder, w którym znajduje się plik zbiorczy z feedbackiem od szefa. Plik zbiorczy posiada wiele arkuszy – każdy arkusz to jedna ocena szefa. Arkusze są ustandaryzowane – tzn. że w każdym arkuszu data oceny i ocena znajduje się w tej samej komórce.

Naszym zadaniem jest wyciągnąć wszystkie oceny ze wszystkich arkuszy ze wszystkich folderów – wiedząc, że zawsze data oceny występuje w drugim wierszu i trzeciej kolumnie, a sama ocena – w drugim wierszu i drugiej komórce.

Rozwiązaniem jest poniższy kod:

from openpyxl import load_workbook
from datetime import datetime
import pandas as pd
lista_uzytkownikow=[xxx]
lista1=[]
lista2=[]
lista3=[]
for element in lista_uzytkownikow:
wb = load_workbook('sciezka'+element+'nazwa_pliku_uzytkownika.xlsx')
for i in wb.sheetnames:
wb2=wb[i]
c1 = wb2.cell(row=2, column=4).value
lista1.append(c1)
lista3.append(element)
c2 = wb2.cell(row=2, column=3).value
try:
c2_2=c2.date()
lista2.append(c2_2)
except:
lista2.append('1999-12-12')
df=pd.DataFrame()
df['agent']=lista3
df['id_rozmowy']=lista1
df['data_rozmowy']=lista2
df.to_excel('sciezka/nazwa_pliku_finalnego.xlsx')

Do obsługi exceli w Pythonie wykorzystujemy bibliotekę openpyxl

from openpyxl import load_workbook

Tworzymy puste listy do dodawania do nich ocen i ich dat oraz nazwy uzytkownika. Tworzymy także listę użytkowników – ścieżek do ich folderów:

lista_uzytkownikow=[xxx]
lista1=[]
lista2=[]
lista3=[]

Następnie tworzymy zagnieżdżoną pętlę for. Dla każdego użytkownika (jego pliku zbiorczego):

for element in lista_uzytkownikow:

Importujemy jego excela:

wb = load_workbook('sciezka'+element+'nazwa_pliku_uzytkownika.xlsx')

I dla każdego arkusza w tym excelu (nazwy arkuszy w pliku zaszyte są pod komendą „sheetnames”

for i in wb.sheetnames:

Odwołujemy się do danego arkusza:

wb2=wb[i]

Pobieramy wartość z interesującej nas komórki – komenda cell i value

c1 = wb2.cell(row=2, column=4).value

I dodajemy do listy:

lista1.append(c1)

Dodajemy do listy także nazwę użytkownika – aby wiedzieć do kogo feedback był skierowany

lista3.append(element)

Następnie pobieramy wartość daty oceny – jest to typ danych datetime:

c2 = wb2.cell(row=2, column=3).value

Zamieniamy wartość na datę. Aby program nie przerwał działania w razie błędu, ubieramy kod w komendę try – except:

try:
c2_2=c2.date()
lista2.append(c2_2)
except:
lista2.append('1999-12-12')

Ostatnim etapem jest utworzenie tabeli DataFrame, dodanie wartości z list jako kolumn oraz eksport do pliku zbiorczego xlsx 🙂

df=pd.DataFrame()
df['uzytkownik']=lista3
df['ocena']=lista1
df['data_oceny']=lista2
df.to_excel('sciezka/nazwa_pliku_finalnego.xlsx')