python实现从word固定表格读取数据写入到excel固定位置

#前提:同事的工作是每天做合同下单,每天要从好多个word中粘贴数据到excel太麻烦了,然后让帮忙看看能不能做一个.exe的程序,每次自动填写,需要手敲的地方在自行填写,也会方便很多,于是有了这篇~

需求:(1)要求两份word模板都能写入excel模板中(根据word表格数量来判断);
(2)从word中获取公司名称、地址、邮编等等信息写入excel右侧表格中(根据固定坐标写入);
(3)产品数量每次不同,需要识别每次有多少再写入到excel中(根据此表的行数使用循环);
(4)地址要求字符长度为17,大于17写入下一行(根据固定长度切割字符串);
(5)公司名称和地址的字符串长度显示出来(len()获取字符串长度)。

具体效果如下图:
python实现从word固定表格读取数据写入到excel固定位置_第1张图片

python实现从word固定表格读取数据写入到excel固定位置_第2张图片
python实现从word固定表格读取数据写入到excel固定位置_第3张图片

代码如下:

import docx
from docx import Document        #导入读取word模块
import os
import os.path
import openpyxl
from  openpyxl import *          #导入读写excel模块
from pythonwin import win32ui    #导入打开文件选择框模块
import re

#打开word文件
dlg = win32ui.CreateFileDialog(1)         #1表示打开文件对话框
dlg.SetOFNInitialDir('C:/Users')          #设置打开文件对话框中的初始显示目录
dlg.DoModal()
WordName = dlg.GetPathName()               #获取选择的文件名称
WordPath = os.path.join(os.getcwd(),WordName)    #获取选择的文件路径
doc = Document(WordPath)                   #读取word文档

#读取word中的表格
tables = doc.tables
a = len(doc.tables)                       #获取word中的表格数量

#打开excel文件
dlg = win32ui.CreateFileDialog(1)         #1表示打开文件对话框
dlg.SetOFNInitialDir('C:/Users')          #设置打开文件对话框中的初始显示目录
dlg.DoModal()
ExcelName = dlg.GetPathName()               #获取选择的文件名称
ExcelPath = os.path.join(os.getcwd(),ExcelName)     #获取选择的文件路径
excel  = load_workbook(ExcelPath)           #读取excel
table = excel.active                        #读取excel中的sheet1,.active为第一张表

#定义拆分地址的函数
def cut_text(text, lenth):
    textArr = re.findall('.{' + str(lenth) + '}', text)     #使用了re模块的findall功能
    textArr.append(text[(len(textArr) * lenth):])
    return textArr

#判断表格数量来区分word版本
if a > 3:
    t = tables[5]
    table.cell(2,6).value = t.cell(1,3).text.lstrip()
    table.cell(4,4).value = t.cell(11,3).text.lstrip()
    table.cell(6,4).value = t.cell(1,3).text.lstrip()
    table.cell(10,4).value = t.cell(5,3).text.lstrip()
    table.cell(13,4).value = t.cell(7,3).text.lstrip()
    table.cell(14,4).value = t.cell(10,3).text.lstrip()
    table.cell(15,4).value = t.cell(8,3).text.lstrip()
    t2 = tables[3]
    b = len(t2.rows)
    x = [2,b-2]
    y = [19,19+(b-4)]
    #获取和写入产品型号和数量
    for i,j in zip(x,y):
        table.cell(j,2).value = t2.cell(i,1).text.lstrip()
        table.cell(j,4).value = t2.cell(i,4).text.lstrip()
    #字符串个数
    table.cell(6,9).value = len(t.cell(1,3).text.lstrip())
    table.cell(7,9).value = len(t.cell(3,3).text.lstrip())
    #地址拆分
    st = cut_text(t.cell(3,3).text,17)
    c = len(st)
    m = [0,c-1]
    n = [7,7+c-1]
    for l,k in zip(m,n):
        table.cell(k,4).value = st[l]


else:
    t = tables[1]
    table.cell(2,6).value = t.cell(1,3).text.lstrip()
    table.cell(4,4).value = t.cell(4,3).text.lstrip()
    table.cell(6,4).value = t.cell(0,1).text.lstrip()
    table.cell(10,4).value = t.cell(4,1).text.lstrip()
    table.cell(13,4).value = t.cell(0,3).text.lstrip()
    table.cell(14,4).value = t.cell(3,3).text.lstrip()
    table.cell(15,4).value = t.cell(1,3).text.lstrip()
    t2 = tables[0]
    b = len(t2.rows)
    x = [1,b-3]
    y = [19,19+(b-4)]
    for i,j in zip(x,y):
        table.cell(j,2).value = t2.cell(i,1).text.lstrip()
        table.cell(j,4).value = t2.cell(i,5).text.lstrip()
    # 字符串个数
    table.cell(6,9).value = len(t.cell(0,1).text.lstrip())
    table.cell(7,9).value = len(t.cell(2,1).text.lstrip())
    #地址拆分
    st = cut_text(t.cell(2,1).text,17)
    c = len(st)
    m = [0,c-1]
    n = [7,7+c-1]
    for l, k in zip(m,n):
        table.cell(k,4).value = st[l]
#保存成新的文件(默认的保存位置为.py的文件位置)
excel.save('new.xlsx')

把.py打包成.exe文件的命令(这样别人可以直接使用.exe文件运行而无需安装python环境)

pyinstaller -w -F word.py -p "D:\software install\Python\project\venv\Lib\site-packages"
注:-w是不显示命令窗口
-F是.py的名称
-p为导入模块的路径,不加会报错为找不到模块XXX
执行此命令可以打开cmd窗口使用cd进入到.py文件的上一层目录,也可以在目录shift + 右键,选择在此处打开命令窗口

你可能感兴趣的:(python)