Excel批量转Word

本文介绍如何利用Python编程实现Excel文件批量转换为Word文档,详细阐述转换过程及所需库的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(word文档的格式待设置)

import pandas as pd
import numpy as np

#先安装,再导包
#pip install python-docx
import docx
from docx import Document 

#表1:明细_原表全字段输出清单
sj_detail=pd.read_excel(r"E:\XX\XX.xlsx",encoding='utf-8')
#表2:周报明细
sj_code=pd.read_excel(r"E:\XX\XXX.xlsx",encoding='utf-8')

# 构建新字段作为表关联的key:名称+编码
sj_detail['kkey']=sj_detail['名称'].map(str)+'_'+sj_detail['编码'].map(str)
sj_code['kkey']=sj_code['项目名称'].map(str)+'_'+sj_code['编号'].map(str)
#通过新字段关联表1、表2,得到宽表
sj_merge=pd.merge(sj_detail, sj_code, how='left', on=['kkey', 'kkey'],indicator=True)

#筛选表1和表2都有的项目
sj_merge_1=sj_merge[sj_merge['_merge']=='both']
#筛选服务人员姓名为:XXX
sj_merge_2=sj_merge_1[sj_merge_1['人员姓名']=='XXX']

# 只有7条数据
#sj_merge_2.shape

#筛选需要的字段
sj_0=sj_merge_2[['名称','所属地区','金额','单位名称','编码生成时间','内容']]
#日期转字符串格式
sj_0['编码生成时间']=sj_0['编码生成时间'].dt.strftime('%Y-%m-%d')

#选择一个路径,模板和输出文件储存的同一个位置
path=r"E:\XX\excel批量转word"

#循环执行,读取dataframe里的每一个值,依次替换模板里的文字
for table_row in range(0,sj_0.shape[0]):  
    wordfile = Document(path+'/'+'项目信息表模板1.docx') #每循环一次实例化一个模板word文件
    for table_col in range(0,sj_0.shape[1]):
        #模板里的的每一个内容对应dataframe的列索引名称,每循环一次读取sj_0的一个列索引,第一次是'名称'
        old_text=str(sj_0.columns[table_col]) 
        #每循环一次读取sj_0某行某列的值,第一次是:第一行第一列的值
        new_text=str(sj_0.iloc[table_row,table_col])
        #使用para.text.replace把模板每个段落里的文字替换成dataframe的值,
        #每循环一次替换一个,第一次是第一行第一列的值替换'商机名称'
        for para in wordfile.paragraphs:
            para.text = para.text.replace(old_text,new_text)
                
        #使用cell.text.replace把模板每个表格里的文字替换成dataframe的值,
        #每循环一次替换一个,第一次是第一行第一列的值替换'名称'
        for table in wordfile.tables:
            for row in table.rows:
                for cell in row.cells:
                    cell.text = cell.text.replace(old_text,new_text)
    
    #储存word文件,文件名称按dataframe的第一列命名,每循环一次读取一个'名称'
    file = str(sj_0.iloc[table_row,0])
    wordfile.save(path+'/'+f'{file}_项目信息表.docx')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值