利用Python实现读取Word表格计算汇总并写入Excel

 更新时间:2022年01月23日 16:11:41   作者:XieJava  
这篇文章主要给大家介绍了关于如何利用Python实现读取Word表格计算汇总并写入Excel的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言

快过年了,又到了公司年底评级的时候了。今年的评级和往常一下,每个人都要填写公司的民主评议表,给各个同事进行评价打分,然后部门收集起来根据收集上来的评价表进行汇总统计。想想要收集几十号人的评价表,并根据每个人的评价表又要填到Excel中进行汇总计算统计给出每个人的评价,就头大。虽然不是个什么难事,但是是个无脑的细致活。几十个人的评价也得要花大半天的时间来弄,而且搞多了还容易搞错。如是就想起干脆用Python写个小程序自动来处理这些脏活累活,评级年年都要评,每年都可以用。

要做的事情就是读放到某个文件夹中的word文档中的评价表格,根据表格内容进行处理,然后汇总所有的表格数据,根据计算规则,算出每个人的评分,在根据评分计算每个人的评价。汇总后写入Excel中。

不可否认用Python来实现这样的事情真的是太方便了,人生苦短我用Python。

我是用的python的docx包来处理word,用pandas来处理数据并写入excel

一、首先导入包

pip install docx
pip install pandas

pandas写excel依赖openpyxl包所以也到导入

pip install openpyxl

二、读评价表所在的目录文件

通过python的os包,列出文件夹里面的文件,识别出.docx的文件

files=os.listdir(filepah)
for file in files:
    if file.find('.docx')>0:
        docfilepah=filepah+file

三、读word文件,处理word中的表格数据

data=[]
#读word的docx评议表文件,并读取word中的表格数据
def procdoc(docfilepath):
    document=Document(docfilepath)
    tables=document.tables
    table=tables[0]
    for i in range(1,len(table.rows)):
        id=int(table.cell(i,0).text)
        name=table.cell(i,1).text
        excellent=0
        if table.cell(i,2).text!='' and table.cell(i,2).text is not None:
            excellent=1
        competent = 0
        if table.cell(i, 3).text!='' and table.cell(i, 3).text is not None:
            competent=1
        basicacompetent=0
        if table.cell(i, 4).text!='' and table.cell(i, 4).text is not None:
            basicacompetent=1
        notcompetent = 0
        if table.cell(i, 5).text!='' and table.cell(i, 5).text is not None:
            notcompetent=1
        dontunderstand =0
        if table.cell(i, 6).text!='' and table.cell(i, 6).text is not None:
            dontunderstand=1
        appraisedata=[id,name,excellent,competent,basicacompetent,notcompetent,dontunderstand]
        data.append(appraisedata)

四、统计计算

通过pandas直接对数据进行统计计算,避免了传统的循环计算。

df = pd.DataFrame(data,columns=['序号','姓名','优秀','称职','基本称职','不称职','不了解'])
df=df.groupby(['序号','姓名']).sum() #汇总每个人每一项的评分
df['票数'] = df.apply(lambda x: x.sum(), axis=1) #统计票数
df['计分'] = (df['优秀']*95+df['称职']*85+df['基本称职']*75+df['不称职']*65+df['不了解']*0)/len(df)#根据规则计分
df['评价']=df['计分'].map(getscore) #根据规则评价评级

计分方法:民主评议得分=Σ各等级票数*等级计分分数/总票数,其中“优秀”计95分,“称职”计85分,“基本称职”计75分,“不称职”计65分,“不了解”不计分。

#根据评分规则计算评级
def getscore(x):
    if x>=95:
        score='优秀'
    elif x>=80 and x<95:
        score='称职'
    elif x>=75 and x<80:
        score='基本称职'
    elif x<75:
        score='不称职'
    return score

五、将统计计算结果写入汇总Excel

通过pandas直接可以将dataframe写入到Excel文件

#将汇总计算好的数据写入Excel
def write2excle(exclefile,dataframe):
    writer = pd.ExcelWriter(exclefile)
    dataframe.to_excel(writer)
    writer.save()
    print('输出成功')

完整代码

Python不到八十行代码,实现读Word->处理表格数据->汇总计算数据->写Excel。

完整的代码如下:

import os
import pandas as pd
from docx import Document

data=[]
#读word的docx评议表文件,并读取word中的表格数据
def procdoc(docfilepath):
    document=Document(docfilepath)
    tables=document.tables
    table=tables[0]
    for i in range(1,len(table.rows)):
        id=int(table.cell(i,0).text)
        name=table.cell(i,1).text
        excellent=0
        if table.cell(i,2).text!='' and table.cell(i,2).text is not None:
            excellent=1
        competent = 0
        if table.cell(i, 3).text!='' and table.cell(i, 3).text is not None:
            competent=1
        basicacompetent=0
        if table.cell(i, 4).text!='' and table.cell(i, 4).text is not None:
            basicacompetent=1
        notcompetent = 0
        if table.cell(i, 5).text!='' and table.cell(i, 5).text is not None:
            notcompetent=1
        dontunderstand =0
        if table.cell(i, 6).text!='' and table.cell(i, 6).text is not None:
            dontunderstand=1
        appraisedata=[id,name,excellent,competent,basicacompetent,notcompetent,dontunderstand]
        data.append(appraisedata)

#读取评议表的目录,并处理目录中的docx文件,根据评议表计算评分,写入汇总表。
def readfile(filepah):
    files=os.listdir(filepah)
    for file in files:
        if file.find('.docx')>0:
            docfilepah=filepah+file
            procdoc(docfilepah)
    df = pd.DataFrame(data,columns=['序号','姓名','优秀','称职','基本称职','不称职','不了解'])
    print(df)
    df=df.groupby(['序号','姓名']).sum()
    df['票数'] = df.apply(lambda x: x.sum(), axis=1)
    df['计分'] = (df['优秀']*95+df['称职']*85+df['基本称职']*75+df['不称职']*65+df['不了解']*0)/len(df)
    df['评价']=df['计分'].map(getscore)
    print(df)
    write2excle('民主评议\\民主评议表汇总.xlsx',df)

#根据评分规则计算评级
def getscore(x):
    if x>=95:
        score='优秀'
    elif x>=80 and x<95:
        score='称职'
    elif x>=75 and x<80:
        score='基本称职'
    elif x<75:
        score='不称职'
    return score

#将汇总计算好的数据写入Excel
def write2excle(exclefile,dataframe):
    writer = pd.ExcelWriter(exclefile)
    dataframe.to_excel(writer)
    writer.save()
    print('输出成功')

if __name__ == '__main__':
    readfile('民主评议\\')

全部源代码:https://github.com/xiejava1018/pythonprocword

总结

到此这篇关于利用Python实现读取Word表格计算汇总并写入Excel的文章就介绍到这了,更多相关Python读取Word计算汇总写入Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python内存管理机制原理详解

    python内存管理机制原理详解

    这篇文章主要介绍了python内存管理机制原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python中queue.Queue之task_done的用法

    python中queue.Queue之task_done的用法

    这篇文章主要介绍了python中queue.Queue之task_done的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python使用tkinter打造三维绘图系统的示例代码

    python使用tkinter打造三维绘图系统的示例代码

    Python 的 tkinter 模块是一个常用的 GUI(图形用户界面)工具包,它能够让你创建窗口应用程序,你可以使用它来构建用户友好的界面,包括按钮、标签、文本框、列表框等各种控件,本文讲给大家介绍如何使用tkinter打造三维绘图系统,需要的朋友可以参考下
    2023-08-08
  • Python实现自定义包的实例详解

    Python实现自定义包的实例详解

    这篇文章主要介绍了实现自定义包的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • 使用Python的Flask框架表单插件Flask-WTF实现Web登录验证

    使用Python的Flask框架表单插件Flask-WTF实现Web登录验证

    Flask处理表单除了本身的WTForms包,使用Flask-WTF扩展来增强表单功能也是很多开发者的选择,这里我们就来讲解如何使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
    2016-07-07
  • Django与图表的数据交互的实现

    Django与图表的数据交互的实现

    本文主要介绍了Django与图表的数据交互的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Python中模块的使用--binascii模块用法

    Python中模块的使用--binascii模块用法

    这篇文章主要介绍了Python中模块的使用--binascii模块用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • python获取url的返回信息方法

    python获取url的返回信息方法

    今天小编就为大家分享一篇python获取url的返回信息方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python如何安装下载后的模块

    python如何安装下载后的模块

    在本篇文章里小编给大家整理了关于python安装下载后的模块的方法,需要的朋友们可以学习下。
    2020-07-07
  • 移除Selenium中window.navigator.webdriver值

    移除Selenium中window.navigator.webdriver值

    这篇文章主要为大家介绍了如何正确的移除Selenium中window.navigator.webdriver的值方法步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论