记录一次py中如何将excel中的数据导出到word中, 关键字导出

完整代码如下:

import openpyxl
from docx import Document
import datetime

# 打开excel文件并读取数据
workbook = openpyxl.load_workbook('list.xlsx')
sheet = workbook.active
data = []
for row in sheet.iter_rows(min_row=2, values_only=True):
    row = [str(cell) if cell is not None else "" for cell in row]
    data.append(row)


for j in range(len(data)):

    # 打开word文件并替换文本
    document = Document('model.docx')
    for paragraph in document.paragraphs:
        # print(paragraph.text)
        if "致,{{name}}" in paragraph.text and data[j][0]:
            paragraph.text = paragraph.text.replace("{{name}}", data[j][0])
        if "{{date1}}" in paragraph.text and data[j][6]:
            paragraph.text = paragraph.text.replace("{{date1}}", data[j][6])
        if "{{hi}}" in paragraph.text and data[j][10]:
            paragraph.text = paragraph.text.replace("{{hi}}", data[j][10])
        if "{{date2}}" in paragraph.text and data[j][6] and not "{{date1}}" in paragraph.text:
            paragraph.text = paragraph.text.replace("{{date2}}", data[j][6])
        if "{{date2}}" in paragraph.text and data[j][7] and "{{date1}}" in paragraph.text:
            paragraph.text = paragraph.text.replace("{{date2}}", data[j][7])
        if "{{bj}}" in paragraph.text and data[j][8]:
            paragraph.text = paragraph.text.replace("{{bj}}", data[j][8])
        if "{{wyj}}" in paragraph.text and data[j][9]:
            paragraph.text = paragraph.text.replace("{{wyj}}", data[j][9])
    now = datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S")
    document.save(f'output_{data[j][0]}_{now}.docx')

# 关闭 Excel 文件
workbook.close()

分析:

这段代码的主要功能是从excel文件中读取数据,然后以此数据为基础替换掉word文档中的相应占位符,并将替换后的word文档保存为新文件。

具体流程如下:

  1. 引入 openpyxldocx 两个库,分别用于操作excel和word文件。

    import openpyxl
    from docx import Document
    
  2. 使用 openpyxl 库打开excel文件list.xlsx,并将数据读出保存到变量 data 中。在读取数据时,如果单元格的值为 None,则将其转换为空字符串 “”。

    workbook = openpyxl.load_workbook('list.xlsx')  # 打开excel文件
    sheet = workbook.active  # 获取活动工作表
    data = []
    for row in sheet.iter_rows(min_row=2, values_only=True):
        row = [str(cell) if cell is not None else "" for cell in row]  # 转换None为""
        data.append(row)
    workbook.close()  # 关闭Excel文件
    

    在这里我们使用了 min_row=2 来跳过第一行,因为第一行通常是表头,不是我们需要的数据。

  3. 使用 docx 库打开Word文档model.docx,并将文本进行替换,最后将替换后的word文档输出为新文件。

    document = Document('model.docx')  # 打开word模板
    for paragraph in document.paragraphs:
        if "致,{{name}}" in paragraph.text:
            for j in range(len(data)):
                for paragraph in document.paragraphs:
                    if "{{name}}" in paragraph.text and data[j][0]:
                        paragraph.text = paragraph.text.replace("{{name}}", data[j][0])
                    if "{{date1}}" in paragraph.text and data[j][6]:
                        paragraph.text = paragraph.text.replace("{{date1}}", data[j][6])
                    if "{{hi}}" in paragraph.text and data[j][10]:
                        paragraph.text = paragraph.text.replace("{{hi}}", data[j][10])
                    if "{{date2}}" in paragraph.text and data[j][6] and not "{{date1}}" in paragraph.text:
                        paragraph.text = paragraph.text.replace("{{date2}}", data[j][6])
                    if "{{date2}}" in paragraph.text and data[j][7] and "{{date1}}" in paragraph.text:
                        paragraph.text = paragraph.text.replace("{{date2}}", data[j][7])
                    if "{{bj}}" in paragraph.text and data[j][8]:
                        paragraph.text = paragraph.text.replace("{{bj}}", data[j][8])
                    if "{{wyj}}" in paragraph.text and data[j][9]:
                        paragraph.text = paragraph.text.replace("{{wyj}}", data[j][9])
                print(data,j)
                document.save(f'output_{data[j][0]}.docx')
    

    在这个过程中,我们使用了双重循环。外层的 for 循环遍历Word文档中的每一段落,找到包含 致,{{name}} 文本的段落。内层的 for 循环用来遍历数据,每次将数据中的占位符 {{name}} 等替换为相应的数据,最后通过 document.save() 方法将替换好数据的Word文档保存为新文件,文件名为 output_{name}.docx,其中 name 是该行数据中的第一列。

  4. 最后,关闭Excel文件。

需要注意的是,在内层循环中,要在替换完相应的占位符后再调用 document.save() 方法保存Word文档,否则会导致代码多次保存同一个文件,从而覆盖之前保存的内容。

你可能感兴趣的:(excel,word,python,数据导出)