柑子ray 发表于 2021-10-16 14:02

【python】word的文件表格批量转execel

【python】word的文件表格批量转execel
由于工作需要隔一段时间都要把word上的相同格式的表格登记到Excel上去,为了节省时间,网上拼凑了些代码,需要的请拿走。

需要用到的包或库
docx,xlwt,os,pywin32

思路:
1.利用docx和xlwt,完成docx文件的读和excel的写(没有设置excel的格式,需要的请自己填充代码)
2.利用os读出所有的文件名,在加上路径,用于遍历文件实现循环
3.利用pywin32,模拟word程序,打开doc文件,另存为docx文件,实现doc→docx。(网上说【docx】库不能读doc文件,所以要doc转换成docx)

这是我的表格样式:


来文单位Xxx1
受文单位Xxx
收文时间2xxxx年x月x日16:00
内容摘要:Xxx3领导批示:
拟办意见: 4Xxxx,xxxxxxxxxx。Xxxxxxxxxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxx。Xxxx。


运行结果:
"C:\Program Files\Python39\python.exe" C:/Users/59564/Desktop/处理代码/docx2excel.py
下面是文件里的内容,好像贴不会excel。。图片贴不了,知道成功就行了。
来文单位        收文时间        内容摘要        拟办意见
Xxx1        2xxxx年x月x日16:00        Xxx3        "
4Xxxx,xxxxxxxxxx。
Xxxxxxxxxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxx。
Xxxx。
"
Xxx1        2xxxx年x月x日16:00        Xxx3        "
4Xxxx,xxxxxxxxxx。
Xxxxxxxxxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxx。
Xxxx。
"
Xxx1        2xxxx年x月x日16:00        Xxx3        "
4Xxxx,xxxxxxxxxx。
Xxxxxxxxxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxx。
Xxxx。
"

下面是代码:
from docx import Document
import xlwt
import os #用于获取目标文件所在路径
from win32com import client as wc #导入win32com包中的client模块

#获取文件列表的函数,输入的文件夹位置在此函数的path中设置
def get_files_path(file_type):
    path="C:\\Users\\59564\\Desktop\\外网\\" # 文件夹绝对路径,也就是你存放doc文件或者docx文件的文件夹
    files=[] #为列表变量
    for file in os.listdir(path):
      if file.endswith(file_type): #排除文件夹内的其它干扰文件,只获取".doc"后缀的word文件
            files.append(path+file)
    return files

#将doc转为docx的函数
def doc2docx(files):
    word = wc.Dispatch("Word.Application") # 打开word应用程序
    for file in files:
      doc = word.Documents.Open(file) #打开word文件
      doc.SaveAs("{}x".format(file), 12)#另存为后缀为".docx"的文件,其中参数12指docx文件
      # format函数这是一种字符串格式化的方法,用法如str.format()。
      #基本语法是通过 {} 和 : 来代替以前的 % 。
      #以下展示两种主要用法:
      #(1)如:语句print("{:.2f}".format(3.1415926)),它的输出为3.14,可以看出命令为保留两位小数点。
      #(2)如:语句"{1} {0} {1}".format("hello", "world"),它的输出为'world hello world',可以看出format为他们设置了位置。

      doc.Close() #关闭原来word文件
    word.Quit()
    print("完成!")


new_workbook=xlwt.Workbook()   #新建工作簿
worksheet=new_workbook.add_sheet('Sheet1') #在工作簿中新建工作表Sheet1
worksheet.write(0,0,'来文单位') #A1单元格内容为“来文单位”
worksheet.write(0,1,'收文时间') #B1为。。。
worksheet.write(0,2,'内容摘要')
worksheet.write(0,3,'拟办意见')

#这里是用来把doc文件转成docx文件,如果你的word文件是doc文件的话,把下面的#删掉就好了
#file_type='doc'
#files=get_files_path(file_type)
#doc2docx(files)


file_type='docx'
files=get_files_path(file_type)
i=1   #i=1代表从Excel表格中第二行开始
for file in files:
    document= Document(file)
    all_table=document.tables #把docx文件中所有的表格读入到all_table中
    #for table in all_table: #遍历所有表单,因为我就1个表,所以没用它,用的话,下面table=all_table清删掉,其余行移入循环内,可能还有其他更改
    table=all_table #只取第一个表,因为我的Excel就1个
    worksheet.write(i, 0, table.cell(0,1).text)    # table.cell(0,1).text代表docx表格第1行第二列的内容,这里没有设置excel的格式,需要的请自己填充代码
    worksheet.write(i, 1, table.cell(2,1).text)    #要注意合并单元格是按不合并的来写位置
    str_1=table.cell(3, 0).text.split(':\n',1)   #因为单元格里有不需要的内容,所以添加了split,只保留特定的某些文本
    worksheet.write(i, 2, str_1)
    str_2=table.cell(4, 0).text.split(':\n',1)
    worksheet.write(i, 3, str_2)
    i = i + 1

new_workbook.save('C:\\Users\\59564\\Desktop\\test.xls')#这是要输出保存的文件夹,注意保存的是xls文件。

hshcompass 发表于 2021-10-31 23:28

谢谢分享。
先收藏,回头试试。

ying656 发表于 2021-11-4 21:35

好牛逼的样子正在学自动化 办公 学习了谢谢分享

baggio_czm 发表于 2021-11-5 13:16

谢谢分享,最近在学

hottuo 发表于 2021-11-5 14:19

很受启发,{:1_921:}办公的没有网络的受欢迎啊
页: [1]
查看完整版本: 【python】word的文件表格批量转execel