小菜鸟的Python笔记001:将Word文档中数据汇总到Excel表格

本文档介绍了一个Python程序,用于自动从Word文档中提取数据并汇总到Excel表格,适用于大量文档的数据整理。通过win32com库实现,涉及文件读取、数据处理和Excel导入。在实现过程中,作者遇到了AttributeError和复选框识别问题,并分享了解决方案。

前言

我并非一个专业的程序员,只是一个普通的编程爱好者、一只小菜鸟。得益于网络上各路大神的技术分享,我学习到很多知识,解决了编程路上的一个个难题。如今我想要将我学习到的知识,遇到的难题记录下来,分享出去,希望能够帮助到有需要的小伙伴。如有错误,请各位多多指教,共同交流!

一、应用场景

1、调查问卷数据导入Excel进行统计
2、普查信息统计:如人口普查、资源普查
3、HR统计员工个人信息、老师统计学生个人信息
等等
以上的工作都可以人工录入,但无疑这会很耗时,效率非常低。十个文档可以这样做,一百个也可以,但几百个呢?上千个呢?那还是不得不借助科技的力量了。

二、程序思路及准备工作

思路如下:

1、将需录入的Word文档放在同一个文件夹
2、获取文件夹内文档的文件名放入列表
3、打开每个文档,提取数据到列表中
4、打开表格,将列表中数据按顺序填入表格

准备工作:

本程序基于win32com库,所以要先装好这个库。

三、程序代码

1、主程序

import win32com
import os
from win32com.client import Dispatch

def main():
	w = win32com.client.Dispatch('Word.Application')   #打开Word,如果你用WPS,那就是"Kwps..Application"  
	w.Visible = 0                                      #不可见,在后台运行
	w.DisplayAlerts = 0                                #不报错,不弹出警告框
	
	e = win32com.client.Dispatch('Excel.Application')   #同理
	e.Visible = 0
	e.DisplayAlerts = 0
	
	docx_path="D:\\Desktop\\lvyou\\123\\"
	name=list(get_filename(dacx_path,'docx'))
	data_list_all=[]
	error_num=0
	ok_num=0
	error_name=[]
	total=len(name)
	
	for i in name:
	    try:                                          #防止出错而导致程序停止
	        add_str=docx_path+i
	        lis=get_word_data(add_str)               #获取文档数据函数,返回数据列表
	        data_list_all.append(lis)                #总列表
	        ok_num=ok_num+1
	        percent=round(ok_num*100/total,2)        #提取进度,
	        print("已完成:"+str(percent)+"%   "+i)
	    except:
	        print(i+" 出错")                          #如果出错便提示
	        error_num=error_num+1                     #出错数
	        error_name.append(i)                      #出错的文档列表
	        continue
	
	excel_file_path="D:\Desktop\lvyou\GIS.xlsx"
	excel=e.Workbooks.Open(excel_file_path).Worksheets(1)   #打开表格
	
	print("请稍后")
	for i in range(len(list_all)):                          #将数据逐一导入,也可以同时导入
	    to_excel(list_all[i],i)
	
	w.Quit()
	e.Quit()

2、获取Word文档列表

def get_filename(path,filetype):            # 输入路径、文件类型 例如'.docx' ,获得该路径下所有此文件类型的文件名
    name = []
    for root,dirs,files in os.walk(path):
        for i in files:
            if filetype+' ' in i+' ':       
                name.append(i)
    return name                             # 输出带后缀的文件名组成的列表

3、提取文档内数据

提取出来的数据还要经过处理才可以使用,怎么处理要分情况,常用的函数有split(),strip(),replace() 等,还可以用正则表达式提取字符串中特定数据。

def get_word_data(add_str):                   #add_str为文档文件名
    doc = w.Documents.Open(add_str)            #打开文档
    w.ActiveDocument.Revisions.AcceptAll()     #如果文档中有修订,为防止错乱,先接受所有修订
    name =doc.Tables[0].Cell(1,2).Range.Text.split()[0]     # 数据2
    addr=doc.Tables[0].Cell(2,2).Range.Text.split()[0]      # 数据1
    number=str(doc.Tables[0].Cell(7,1).Range.Text)[3:]      # 数据3 
    doc.Close()
    return name,addr,number

4、导入到Excel表格

def to_excel(lis,i):        #lis为数据,i为第i个文档的数据
    zimu=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q"]  #有个函数可以直接生成字母列表,但是懒得找了
    for a in range(len(lis)):
        excel.Cells(i+2,zimu[a]).value = lis[a]
    excel.SaveAs(excel_file_path)     #保存

四、遇到的问题

1、错误AttributeError: word.Application.Quit

这个问题是因为 win32com.client.Dispatch()中参数错误,要根据所安装的文档软件填写。

2、word文档中复选框的识别

Word文档中复选框提取出来后的内容完全无法识别它是有勾选还是没有勾选。这个问题我想了好久,最终用了一种曲折的方法成功识别,这个方法下一篇文章再单独讲吧。

总结

以上就是本文档的全部内容,win32com库的功能还有很多,我将继续探索,让它可以帮助我们解放双手,享受编程带来的乐趣。

第一次写技术分享文章,较为粗略,有问题可以私信和我交流!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值