如何通过Python在现有的Excel电子表格中添加列名?

3

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

你考虑过使用Pandas吗?我认为大部分,如果不是全部的功能都可以用不到五行代码实现(例如:read_excel、merge、ExcelWriter等)。 - undefined
我目前无法使用panda。是否有一种方法可以在我当前的代码基础上进行额外编码来实现它?谢谢。 - undefined
1个回答

0

要在Excel文档的现有工作表中添加列名,您需要在工作表顶部插入一行。

这样做存在两个主要问题:

  • 插入行并不困难,但显然openpyxl尚未实现(或尚未完全实现)此功能。
  • 插入行将更改工作表的内容。某些程序可能依赖于“应付款”工作表中第一个员工的姓名位于A1单元格中。

无论如何:如果您真的想对“应付款”工作表进行此操作,您可以! 您在my_dict3字典中拥有所有相关信息。

  1. 所以你可以清空“应付款表”的所有内容。

  2. 之后,你只需写入列标题:

    sheet3.cell(row=1, column=1).value = '员工姓名'
    sheet3.cell(row=1, column=2).value = '总付款'
    
  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. 请确保在该表的其余行中没有旧数据...

根据我理解,"payable sheet" 是你的输出表格(你的程序不会向其他两个表格中写入任何内容)。
然而,只有在你确信可以放弃该表格上现有信息的情况下,才应这样做。
(将标题行写入前两个表格可能不是一个好主意,因为你只将它们用作输入。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接