如何通过python将列名放在现有的excel电子表格上?

时间:2017-11-30 20:28:07

标签: python excel

Test_book.xlsx是一个现有的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

1 个答案:

答案 0 :(得分:0)

要将列名添加到Excel文档中的现有工作表,您必须在工作表的顶部插入一行。 这有两大问题:

  • 插入一行并不困难,但显然它还没有(或者还没有)在openpyxl中实现。
  • 插入行将更改工作表的内容。某些程序可能依赖于应付款表单的单元格A1中的第一个员工的姓名。

无论如何:如果你真的想在应付款表中这样做,你可以! 您已获得my_dict3字典中的所有相关信息。

  1. 因此,您可以清除应付款表中的所有内容。

  2. 之后,您只需编写列标题:

    sheet3.cell(row=1, column=1).value = 'Employee Name'
    sheet3.cell(row=1, column=2).value = 'Total Payment'
    
  3. 之后,您可以填写其他行:

    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. 请确保表单的其余行中没有旧数据...

  5. 据我了解,应付工作表是您的输出表(您的程序不会向其他2张表写任何内容)。

    但是,如果您确定可以丢弃该表上的现有信息,那么您应该这样做。

    (将标题行写入前两页可能不是一个好主意,因为您只将它们用作输入。)