python---根据excel表格数据及word模板,批量修改word内容,生成指定列标题文件

**前言:因为要补充项目资料,只需按模板替换时间,人名,标题等关键信息,其它不做修改

1.导入python库(我使用的python3.9.10)

pip install pandas python-docx

2.需要注意的都在代码注释里写清楚了


from docx import Document
from openpyxl import load_workbook

# @author chu
# @time  date 2024-5-11
# @content 根据excel内容,批量修改word文件内容

#定义一个替换的函数··用于替换word表格中的文字
def replace_table_word(doc, old_word, new_word):
    for p in doc.tables:  # 遍历文档表
        for run in p.rows:  # 遍历表的行
            for cell in run.cells: # 遍历行的单元格
                cell.text = cell.text.replace(old_word, new_word)  #替换单元格的文字,然后赋值给字块
#定义一个替换的函数··用于替换word段落中的文字
def replace_word(doc, old_word, new_word):
    for p in doc.paragraphs:  # 遍历文档段落
        for run in p.runs:  # 遍历段落的字块
            run.text = run.text.replace(old_word, new_word)  # 替换字块的文字,然后赋值给字块



# 打开工作簿获取工作表
def get_excel_data(excel_file):
    title_wb = load_workbook(excel_file)       #引入excel文件
    title_sheet = title_wb.active
    change_docx_data(title_sheet, word_file, min_row)
    #将title_wb工作簿中的活动工作表赋值给title_sheet变量。这样就可以通过title_sheet变量来操作这个工作表了。

# 遍历工作表中的数据,将工作表的内容
def change_docx_data(title_sheet, word_file, min_row):
    for row in title_sheet.iter_rows(min_row, values_only=True):
        # 获取“检查时间”
        checkTime = row[colNum1]
        # 获取“名字”
        name = row[colNum2]
        # 获取“文件名称名称”
        num = row[colNum3]
        # 打开Word文件
        doc = Document(word_file)    #引入模板文件
        # 执行替换函数
        #替换段落内容
        replace_word(doc, old_word_name, '{}'.format(name))
        replace_word(doc, old_word_time, '{}'.format(checkTime))
        #替换表格内容
        replace_table_word(doc, old_word_name, '{}'.format(name))
        replace_table_word(doc, old_word_time, '{}'.format(checkTime))
        doc.save(new_column.format(num))    #储存位置


if __name__ == "__main__":
    # @文件路径  ***注:word文件必须是保存的.docx格式,否则会报错。***
    excel_file = 'I:/平台工作内容/11.项目资料/10.2024年资料补充/运维项目资料补充V1.1-附件2/111/11.xlsx'  # 替换为你的Excel文件路径
    word_file = 'I:/平台工作内容/11.项目资料/10.2024年资料补充/运维项目资料补充V1.1-附件2/111/平台运行记录.docx'  # 替换为你的Word文件路径
    new_column = 'I:/平台工作内容/11.项目资料/10.2024年资料补充/运维项目资料补充V1.1-附件2/111/{}.docx' #存放文件的目录

    min_row = 2     #excel表格数据行数--不算表头

    # @对应制作的表格列数---第一列从0开始
    # 获取“检查时间”
    colNum1 = 0
    # 获取“名字”
    colNum2 = 1
    # 获取“文件名称名称”
    colNum3 = 3
    #替换word表格中的内容
    old_word_name = 'xxx'  #模板word需要替换的内容
    old_word_time = '2024.2.1' #模板word需要替换的内容
    #第一个方法 读取excel内容
    get_excel_data(excel_file)

【效果】

①excel数据表

②word文档

③修改后的效果

④9.1号的文件

⑤9.5号的文件

注:要想修改其它内容,需要在excel表中修改数据,并定义--change_docx_data--方法的列
Python中,可以使用`pandas`库来读取Excel表格数据,使用`python-docx`库来操作Word文档。以下是一个示例代码,展示了如何从Excel表格中读取数据,然后将其写入Word模板中,批量生成文档。 首先,确保安装了所需的库: ```bash pip install pandas python-docx openpyxl ``` 然后,编写以下代码: ```python import pandas as pd from docx import Document from docx.shared import Pt # 读取Excel表格数据 excel_file = 'data.xlsx' df = pd.read_excel(excel_file) # 打开Word模板 template_file = 'template.docx' doc = Document(template_file) # 替换Word模板中的占位符 for index, row in df.iterrows(): for paragraph in doc.paragraphs: if '{name}' in paragraph.text: paragraph.text = paragraph.text.replace('{name}', row['name']) if '{age}' in paragraph.text: paragraph.text = paragraph.text.replace('{age}', str(row['age'])) # 保存新的Word文档 output_file = f"output_{index + 1}.docx" doc.save(output_file) # 重新打开模板以便下一个数据行使用 doc = Document(template_file) print("批量生成Word文档完成!") ``` ### 代码说明: 1. **读取Excel表格数据**:使用`pandas`库读取Excel文件中的数据。 2. **打开Word模板**:使用`python-docx`库打开一个Word模板文件。 3. **替换占位符**:遍历Word文档中的每个段落,查找并替换占位符(如`{name}`和`{age}`)为Excel表格中的实际数据。 4. **保存新的Word文档**:将替换后的文档保存为新的文件。 5. **重新打开模板**:为了批量生成多个文档,重新打开模板文件以便下一个数据行使用。 ### 注意事项: - 确保Excel文件数据列名与代码中的名称一致。 - 确保Word模板中存在与代码中相同的占位符。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值