2017-02-21 6 views
0

Ich versuche, die doppelten Einträge aus einer Spalte mit openpyxl zu entfernen und die eindeutigen Einträge in eine andere Arbeitsmappe zu schreiben.Openpyxl: Entfernen von doppelten Zellen aus einer Spalte

Eingabedatei:

 
Cust1 
Cust1 
Cust1 
Cust2 
Cust2 
Cust3 

Erwartete Ausgabe ist:

 
Cust1 
Cust2 
Cust3 
wb1 = openpyxl.load_workbook('OldFile.xlsx') 
ws = wb1.active 
wb2 = openpyxl.Workbook() 
ws2 = wb2.active 
k=1 
new_row1 = [] 
for i in range(2, ws.max_row + 1): 
    new_row1.append([])     #list for storing the unique entries 
    row_name = ws.cell(row=i,column=1).value #taking the 1st cell's value 
    new_row1[k].append(row_name)    #Appending the list 
    ws2.append(new_row1)      #writing to new workbook 
    k+=1          
    for j in range(3, ws.max_row + 1): 
    row_name2 = ws.cell(row=j, column=1).value #taking 2nd cell's value 
    if row_name == row_name2:     #comparing both the values 
     i+=1          
     j+=1 
wb2.save('NewFile.xlsx') 

ich "IndexError: list index out of range" for line "new_row1[k].append(row_name)" bin immer, auch abgesehen von den erwähnten Fehlern ist es etwas, das die bekommen geändert werden muss, um zu erforderliche Ausgabe.

+0

Sie brauchen 'k = 0' anstelle von' k = 1'. Listen in Python beginnen mit Index 0. Verwenden Sie die Funktion 'set()', um eine Liste von Daten zu erstellen, die in Python eindeutig sind. Ihre Frage ist keine Excel-Frage, sondern eine 100% Python-Frage. – Elmex80s

+1

Bitte verbringe etwas Zeit damit, dich mit der openpyxl-Dokumentation vertraut zu machen. Dies ist unnötig komplizierter Code. Zerlegen Sie es in Stücke, mit denen Sie leichter arbeiten können. –

Antwort

0

Wie @CharlieClark sagte Ihr Code ist übermäßig kompliziert. Versuchen Sie stattdessen:

ws1 = wb1.active # keep naming convention consistent 

values = [] 
for i in range(2,ws1.max_row+1): 
    if ws1.cell(row=i,column=1).value in values: 
    pass # if already in list do nothing 
    else: 
    values.append(ws1.cell(row=i,column=1).value) 

for value in values: 
    ws2.append([value]) 
Verwandte Themen