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')