2021-05-31

用python读取excel内容,来汇总周报

每周需要整理项目周报组织周会,并且要给领导报送,每周硬件、软件、算法、固件、测试等各个负责人会将各自的进度按照周报模板提交上来,所以萌生了通过代码自动合并的方式;

工具

①python 3.10
②PyCharm Community Edition

功能模块

只用到了“openyxl”中的“load_workbook”,用于读取excel文件

①下载openpyxl-3.0.7-py2.py3-none-any.whl,放在python安装位置的lib文件夹里:Python\venv\Lib
②dos窗口进入python文件夹,键入命令“pip install openpyxl-3.0.7-py2.py3-none-any.whl”,回车。

PS:python里还有两个功能模块能够编辑excel,“xlrd”与“xlwt”,但不支持office2007之后的版本

思路

①有一个总的excel
②若干个分excel
③读取分excel中的内容,赋值给总excel中对应的位置

(1)导入功能模块

from openyxl import load_workbook

(2)读取excel

wb = load_workbook(filename="周报")#获取总周报,wb只是一个名称,可以随意取
wbHW = load_workbook(filename="周报-硬件")#获取硬件周报,HW为hardware缩写
wbSW = load_workbook(filename="周报-软件")#获取软件周报SW为software缩写
···#同理获取其他的

(3)读取工作sheet页

sheet = wb.['周工作汇总']#获取总周报wb的sheet页‘周工作汇总’
sheetHW = wbHW.['周工作汇总']#获取wbHW的sheet页‘周工作汇总’
sheetSW = wbSW.['周工作汇总']#同上
···

(4)汇总内容

①通过for循环不断从分excel中遍历行与列内容,并赋值给总excel的相同位置。
②找到第一个需要复制内容的单元格,看下坐标,如第4-9行的第1列和第10列是需要复制的内容:

for x in range(4,10):#x表示行,取值范围是4-9行,ps:range函数取值范围不包含最后一位,即range(4,10)表示4,5,6,7,8,9
    for y in [1,10]:#用y表示列,因为只有第1列和第10列,因此不需要range;两个for循环来使x,y循环组合
        sheet.cell(row=x,column=y).value = sheetST.cell(row=x,column=y).value #sheet.cell(row=x,column=y).value表示sheet页中坐标为x,y的值

###方法解释
sheet.cell(row=x,column=y).value
意思是:sheet中行为x,列为y的单元格的值
①sheet表示wb的sheet页,开头进行了定义
②.cell是cell方法,有两个值,row与column,分别表示行与列
③.value是单元格值,sheet[‘A5’].value表示A5的值

(5)实例

from openpyxl import load_workbook

#读取工作表
#workbook = load_workbook(filename = "/*.xlsx\
date = "(20210524-20210528)"
workbook1 = load_workbook(filename="项目周报"+ date +"_V1.0.xlsx")
workbook2 = load_workbook(filename="项目周报"+ date +"_V1.0-硬件.xlsx")
workbook3 = load_workbook(filename="项目周报"+ date +"_V1.0-软件.xlsx")
workbook4 = load_workbook(filename="项目周报"+ date +"_V1.0-算法.xlsx")
workbook5 = load_workbook(filename="项目周报"+ date +"_V1.0-测试.xlsx")
workbook6 = load_workbook(filename="项目周报"+ date +"_V1.0-工程.xlsx")
workbook7 = load_workbook(filename="项目周报"+ date +"_V1.0-固件.xlsx")
workbook8 = load_workbook(filename="项目周报"+ date +"_V1.0-北京.xlsx")

#周工作总结
sheet = workbook1['周工作总结'] #读取总表“周工作总结”页
sheetHW = workbook2['周工作总结'] #读取硬件“周工作总结”页
sheetSW = workbook3['周工作总结'] #读取软件“周工作总结”页
sheetAL = workbook4['周工作总结'] #读取算法“周工作总结”页
sheetTS = workbook5['周工作总结'] #读取测试“周工作总结”页
sheetST = workbook6['周工作总结'] #读取工程“周工作总结”页
sheetFW = workbook7['周工作总结'] #读取固件“周工作总结”页

#人力投入
sheetRL = workbook1['人力投入'] #读取总表“人力投入”页
sheetHWRL = workbook2['人力投入'] #读取硬件“人力投入”页
sheetSWRL = workbook3['人力投入'] #读取软件“人力投入”页
sheetALRL = workbook4['人力投入'] #读取算法“人力投入”页
sheetTSRL = workbook5['人力投入'] #读取测试“人力投入”页
sheetSTRL = workbook6['人力投入'] #读取工程“人力投入”页
sheetFWRL = workbook7['人力投入'] #读取固件“人力投入”页
sheetBJRL = workbook8['人力投入'] #读取北京“人力投入”页

#进展
for x in range(4,9):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetST.cell(row=x,column=y).value
#②区域- 平台
for x in range(9,13):
    for y in [1, 10]:
        sheet.cell(row=x,column=y).value = sheetSW.cell(row=x,column=y).value
#sheet['A10'].value,sheet['J10'].value = sheetSW['A10'].value,sheetST['J10'].value
#③平台
#sheet['A12'].value,sheet['J12'].value = sheetSW['A12'].value,sheetSW['J12'].value
#④测试
for x in range(13,15):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetTS.cell(row=x,column=y).value
#sheet['A14'].value,sheet['J14'].value = sheetTS['A14'].value,sheetST['J14'].value
#⑤固件
for x in range(15,17):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetFW.cell(row=x,column=y).value
#sheet['A16'].value,sheet['J16'].value = sheetFW['A16'].value,sheetFW['J16'].value
#⑥算法
for x in range(17,19):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetAL.cell(row=x,column=y).value
#sheet['A18'].value,sheet['J18'].value = sheetAL['A18'].value,sheetAL['J18'].value

#硬件
for x in range(22,27):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetHW.cell(row=x,column=y).value
#sheet['A24'].value,sheet['J24'].value = sheetHW['A24'].value,sheetHW['J24'].value
#结构
#sheet['A26'].value,sheet['J26'].value = sheetHW['A24'].value,sheetHW['J24'].value
#固件
for x in range(27,29):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetFW.cell(row=x,column=y).value
#sheet['A28'].value,sheet['J28'].value = sheetFW['A28'].value,sheetFW['J28'].value
#②防区
for x in range(42,46):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetHW.cell(row=x,column=y).value
#硬件
#sheet['A43'].value,sheet['J43'].value = sheetHW['A43'].value,sheetHW['J43'].value
#结构
#sheet['A45'].value,sheet['J45'].value = sheetHW['A45'].value,sheetHW['J45'].value
#固件
for x in range(46,48):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetFW.cell(row=x,column=y).value
#sheet['A47'].value,sheet['J47'].value = sheetFW['A47'].value,sheetFW['J47'].value
#③区域
#硬件
for x in range(49,51):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetHW.cell(row=x,column=y).value
#sheet['A50'].value,sheet['J50'].value = sheetHW['A50'].value,sheetHW['J50'].value
#区域
for x in range(51,55):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetSW.cell(row=x,column=y).value
#sheet['A52'].value,sheet['J52'].value = sheetSW['A52'].value,sheetSW['J52'].value
#③平台
#sheet['A54'].value,sheet['J54'].value = sheetSW['A54'].value,sheetSW['J54'].value
#④测试
for x in range(57,59):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetTS.cell(row=x,column=y).value
#sheet['A58'].value,sheet['J58'].value = sheetTS['A58'].value,sheetTS['J58'].value
#⑤交付
for x in range(59,61):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetST.cell(row=x,column=y).value
#sheet['A59'].value,sheet['J59'].value = sheetST['A59'].value,sheetST['J59'].value
#⑥算法
for x in range(55,57):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetAL.cell(row=x,column=y).value
#sheet['A56'].value,sheet['J56'].value = sheetAL['A56'].value,sheetAL['J56'].value

#硬件
for x in range(63,68):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetHW.cell(row=x,column=y).value
#sheet['A65'].value,sheet['J65'].value = sheetHW['A65'].value,sheetHW['J65'].value
#结构
#sheet['A67'].value,sheet['J67'].value = sheetHW['A67'].value,sheetHW['J67'].value
#固件
for x in range(68,70):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetFW.cell(row=x,column=y).value
#sheet['A69'].value,sheet['J69'].value = sheetFW['A69'].value,sheetFW['J69'].value

#结构
for x in range(79,82):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetHW.cell(row=x,column=y).value
#sheet['A81'].value,sheet['J81'].value = sheetHW['A81'].value,sheetHW['J81'].value

#硬件
for x in range(83,87):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetHW.cell(row=x,column=y).value
#sheet['A84'].value,sheet['J84'].value = sheetHW['A84'].value,sheetHW['J84'].value
#结构
#sheet['A86'].value,sheet['J86'].value = sheetHW['A86'].value,sheetHW['J86'].value
#固件
for x in range(87,89):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetFW.cell(row=x,column=y).value
#sheet['A88'].value,sheet['J88'].value = sheetFW['A88'].value,sheetFW['J88'].value
#②防区
#硬件
for x in range(89,94):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetHW.cell(row=x,column=y).value
#sheet['A91'].value,sheet['J91'].value = sheetHW['A91'].value,sheetHW['J91'].value
#结构
#sheet['A93'].value,sheet['J93'].value = sheetHW['A93'].value,sheetHW['J93'].value
#固件
for x in range(94,96):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetFW.cell(row=x,column=y).value
#sheet['A95'].value,sheet['J95'].value = sheetFW['A95'].value,sheetFW['J95'].value
#③区域
#硬件
for x in range(96,99):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetHW.cell(row=x,column=y).value
#sheet['A98'].value,sheet['J98'].value = sheetHW['A98'].value,sheetHW['J98'].value
#区域
for x in range(99,103):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetSW.cell(row=x,column=y).value
#sheet['A100'].value,sheet['J100'].value = sheetSW['A100'].value,sheetSW['J100'].value
#③应用平台
#sheet['A102'].value,sheet['J102'].value = sheetSW['A102'].value,sheetSW['J102'].value
#④测试
for x in range(105,107):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetTS.cell(row=x,column=y).value
sheet['A106'].value,sheet['J106'].value = sheetTS['A106'].value,sheetTS['J106'].value
#⑤交付
for x in range(107,109):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetST.cell(row=x,column=y).value
#sheet['A108'].value,sheet['J108'].value = sheetST['A108'].value,sheetST['J108'].value
#⑥算法
for x in range(103,105):
    for y in [1,10]:
        sheet.cell(row=x,column=y).value = sheetAL.cell(row=x,column=y).value
#sheet['A104'].value,sheet['J104'].value = sheetAL['A104'].value,sheetAL['J104'].value

#人力投入
#硬件
for co in range(1,60):
    if sheetHWRL.cell(row=1,column=co).value == '当周':
        for ro in range(13,20):
            sheetRL.cell(row=ro,column=co).value = sheetHWRL.cell(row=ro,column=co).value
#软件
for co in range(1,60):
    if sheetSWRL.cell(row=1,column=co).value == '当周':
        for ro in range(26,36):
            sheetRL.cell(row=ro,column=co).value = sheetSWRL.cell(row=ro,column=co).value
#固件
for co in range(1,60):
    if sheetFWRL.cell(row=1,column=co).value == '当周':
        for ro in range(20,26):
            sheetRL.cell(row=ro,column=co).value = sheetFWRL.cell(row=ro,column=co).value
#算法
for co in range(1,60):
    if sheetALRL.cell(row=1,column=co).value == '当周':
        for ro in range(36,44):
            sheetRL.cell(row=ro,column=co).value = sheetALRL.cell(row=ro,column=co).value
#测试
for co in range(1,60):
    if sheetTSRL.cell(row=1,column=co).value == '当周':
        for ro in range(44,46):
            sheetRL.cell(row=ro,column=co).value = sheetTSRL.cell(row=ro,column=co).value
#交付
for co in range(1,60):
    if sheetSTRL.cell(row=1,column=co).value == '当周':
        ro = 46
        sheetRL.cell(row=ro,column=co).value = sheetSTRL.cell(row=ro,column=co).value
#sheetRL[a+'46'].value = sheetSTRL[a+'46'].value
#北京
for co in range(1,60):
    if sheetBJRL.cell(row=1,column=co).value == '当周':
        for ro in range(8,11):
            sheetRL.cell(row=ro,column=co).value = sheetBJRL.cell(row=ro,column=co).value

workbook1.save(filename="项目周报"+ date +"_V1.0.xlsx")
print("运行结束!")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值