2017-11-30 2 views
2

Test_book.xlsx는 직원 이름, 시간, 요율 및 총 지불액을 표시해야하는 기존 Excel 파일입니다. 직원 이름과 근무 시간을 한 시트에 표시하고 직원 이름과 지불 비율을 두 번째 시트에 표시하고 마지막으로 직원 이름과 마지막 결제일을 마지막 시트에 표시하는 부분에 도달했습니다. 그러나 각 시트 (직원 이름, 시간, 시간당 요금, 총 지불)에 열 이름을 지정하는 방법을 알아낼 수 없습니다.기존 Excel 스프레드 시트에 파이썬을 통해 열 이름을 어떻게 두는가?

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)   

이 첨부 된 이미지를 통해 볼 수 있듯이, 더 열이 없습니다 : enter image description here

+0

당신이 팬더를 사용하여 생각 해 봤나? 나는이 모든 것이 아니라면 대부분이 5 줄 미만으로 수행 될 수 있다고 생각합니다 (예 : read_excel, merge, ExcelWriter 등). – DrTRD

+0

현재 팬더를 사용할 수 없습니다. 현재 가지고있는 코드 위에 추가 코딩 기능을 추가 할 수 있습니까? 고맙습니다. –

답변

0

는 기존 시트에 열 이름을 추가하려면 여기 내가 작업했던 코드 문서를 능가한다면 시트 상단에 행을 삽입해야합니다. 이 2 큰 그 문제가 있습니다 : 행을 삽입

  • 어려운 것이 아니라, 분명히 그렇지가 (또는 아직) openpyxl에 구현.
  • 행을 삽입하면 시트의 내용이 변경됩니다. 일부 프로그램은 Payable 시트의 A1 셀에있는 첫 번째 직원의 이름에 의존합니다.

어쨌든 : 실제로 지불 표에 맡기고 싶다면! my_dict3 사전에 관련된 모든 정보가 있습니다.

  1. 따라서 채무 명세서에서 모든 내용을 지울 수 있습니다.

    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 
    
  2. 에는 이전 데이터가 없습니다 있는지 확인하십시오 : 당신이 다른 행을 채울 수 있습니다, 그 후

    sheet3.cell(row=1, column=1).value = 'Employee Name' 
    sheet3.cell(row=1, column=2).value = 'Total Payment' 
    
  3. :

  4. 그 후, 당신은 단순히 열 머리글을 쓸 수 있습니다 시트의 나머지 열에 ...

내가 알기로 지불 할 수있는 시트는 출력 시트입니다 (프로그램은 다른 2 장에 아무것도 쓰지 않습니다).

여전히 시트에있는 기존 정보를 버릴 수 있다고 확신하는 경우에만이 작업을 수행해야합니다.

(만 입력으로 그들을 사용하고 있기 때문에, 좋은 생각되지 않을 수도 있습니다 첫 2 매 헤더 행을 작성.)

관련 문제