2017-11-30 1 views
2

Test_book.xlsx ist eine vorhandene Excel-Datei, die Angestelltennamen, Stunden, Rate und Gesamtbezahlung anzeigen soll. Ich kam zu einem Teil, auf dem auf dem zweiten Blatt die Namen und Stunden der Angestellten in einem Blatt, die Namen der Angestellten und die Auszahlungsrate angezeigt wurden, und zuletzt die Namen der Mitarbeiter und die Gesamtbezahlung auf dem letzten Blatt; Ich kann jedoch nicht herausfinden, wie man Spaltennamen auf jedem Blatt anlegt (Angestelltennamen, Stunden, Stundensätze, Gesamtbezahlung). Hier ist der Code, den ich habe auf gearbeitet:Wie setzen Sie Spaltennamen in vorhandene Excel-Tabelle durch Python?

import openpyxl 
from itertools import chain 
from collections import defaultdict 

wb = openpyxl.load_workbook("Test_book.xlsx") 
sheet=wb.get_sheet_by_name('Hours') 
employee_names=[] 
employee_hours=[] 
for row in sheet['A']: 
    employee_names.append(row.value) 
for row in sheet['B']: 
    employee_hours.append(row.value) 
print(employee_names) 
print(employee_hours) 
my_dict=dict(zip(employee_names,employee_hours)) 
print(my_dict) 

sheet2=wb.get_sheet_by_name('Rate') 
employee_names2=[] 
employee_Rate=[] 

for row in sheet2['A']: 
    employee_names2.append(row.value) 
for row in sheet2['B']: 
    employee_Rate.append(row.value) 
print(employee_names2) 
print(employee_Rate) 

my_dict2=dict(zip(employee_names2,employee_Rate)) 
print(my_dict2) 


sheet3=wb.get_sheet_by_name('payable') 
sheet3rows=[] 
#pulls key from dictionary, multiples it by other number 
for row in sheet['A']: 
    if row.value in my_dict: 
     gross=(float(my_dict[row.value]*float(my_dict2[row.value])))  
     #creates list 
     sheet3rows.append(gross) 

print(format(gross,'.2f')) 
print(sheet3rows) 

my_dict3=dict(zip(employee_names2,sheet3rows)) 

print(my_dict3) 

#Print gross to payable sheet 
r=1 
for x in sheet3rows: 
    sheet3.cell(row=r,column=2).value=x 
    r+=1 



#wb.save("Test_book.xlsx") 

my_dict4 = defaultdict(list) 

for k, v in chain(my_dict.items(), my_dict2.items(), my_dict3.items()): 
    my_dict4[k].append(v) 

for k, v in my_dict4.items(): 
    print(k, v)   

Wie Sie durch dieses angehängte Bild sehen können, gibt es keine Spalten: enter image description here

+0

Haben Sie Pandas mit in Betracht gezogen? Ich denke, dass das meiste, wenn nicht alles, in weniger als fünf Zeilen erledigt werden kann (z. B. read_excel, merge, ExcelWriter usw.). – DrTRD

+0

Ich kann im Moment keinen Panda benutzen. Gibt es eine Möglichkeit, dies zu tun, indem ich zusätzlich zu dem, was ich derzeit habe, noch weitere Kodierungen habe? Vielen Dank. –

Antwort

0

Um Spaltennamen an eine bestehenden Blatt in einem hinzufügen Excel-Dokument, müssen Sie eine Zeile am oberen Rand des Blattes einfügen. Es gibt zwei große Probleme mit, dass:

  • Einfügen einer Zeile ist nicht schwer, aber es hat offenbar nicht (oder noch nicht) wurden in openpyxl umgesetzt.
  • Durch das Einfügen einer Zeile wird der Inhalt des Blattes geändert. Einige Programme können sich auf den Namen des ersten Mitarbeiters beziehen, der sich in der Zelle A1 des Fensters Zahlung befindet.

Wie auch immer: Wenn Sie das wirklich zu dem bezahlbaren Blatt tun wollen, können Sie! Sie haben alle relevanten Informationen im Wörterbuch my_dict3.

  1. So können Sie alle Inhalte aus dem Payable Sheet löschen.

  2. Danach können Sie einfach die Spaltenüberschriften schreiben:

    sheet3.cell(row=1, column=1).value = 'Employee Name' 
    sheet3.cell(row=1, column=2).value = 'Total Payment' 
    
  3. Danach können Sie die anderen Zeilen füllen:

    rownum = 2 
    for (k,v) in my_dict3.iteritems: 
        sheet3.cell(row=rownum, column=1).value = k 
        sheet3.cell(row=rownum, column=2).value = v 
        rownum = rownum + 1 
    
  4. Bitte stellen Sie sicher, dass es keine alten Daten in den übrigen Zeilen des Blattes ...

So weit So wie ich es verstanden habe, ist das zahlbare Blatt Ihr Ausgabeblatt (Ihr Programm schreibt nichts auf die anderen 2 Blätter).

Dennoch sollten Sie dies nur tun, wenn Sie wirklich sicher sind, dass es in Ordnung ist, die vorhandenen Informationen auf diesem Blatt wegzuwerfen.

(Schreibkopfzeilen zu den ersten 2 Blatt könnte eine gute Idee nicht sein, da man sie als Eingabe nur.)

Verwandte Themen