第十二篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化操作Word_为每个片段创建并保存一个独立的序列

doc.add_paragraph(‘这是第一段文本。’)
doc.add_paragraph(‘这是第二段文本,具有不同的样式。’, style=‘Intense Quote’)

添加列表

unordered_list = doc.add_paragraph(‘Unordered List:’)
unordered_list.level = 0 # 设置为顶级列表
unordered_list.add_run(‘Item 1’).bold = True
unordered_list.add_run(‘\tItem 1.1’) # 使用制表符缩进子项
unordered_list.add_run(‘\nItem 2’)

添加表格

table = doc.add_table(rows=2, cols=3)
table.style = ‘Table Grid’ # 应用预定义表格样式
for row in table.rows:
for cell in row.cells:
cell.text = f’Cell {row.index + 1}-{cell.column_index + 1}’

插入图片

image_path = ‘example.jpg’
doc.add_picture(image_path, width=Inches(1), height=Inches(1))

添加页面分隔符

section = doc.sections[-1] # 获取当前最后一节
section.page_break_before = True # 在下一节前插入分页符

保存文档

doc.save(‘new_document.docx’)


2. **读取现有文档并进行结构化操作**



from docx import Document

打开现有文档

doc = Document(‘existing_document.docx’)

查找与替换文本

for paragraph in doc.paragraphs:
if ‘old_text’ in paragraph.text:
paragraph.text = paragraph.text.replace(‘old_text’, ‘new_text’)

提取特定段落

target_style = ‘Heading 1’
heading_paragraphs = [para for para in doc.paragraphs if para.style.name == target_style]
for para in heading_paragraphs:
print(f’找到标题段落: {para.text}')

提取表格数据

table_data = []
for table in doc.tables:
for row in table.rows:
row_data = [cell.text for cell in row.cells]
table_data.append(row_data)
print(“表格数据:\n”, table_data)

保存更新后的文档(如果需要)

doc.save(‘updated_document.docx’)


这些示例代码展示了如何使用`python-docx`库创建新文档,添加文本、段落、列表、表格、图片和页面分隔符,以及如何读取现有文档,进行查找与替换文本、提取特定样式段落和表格数据等结构化操作。您可以根据实际需求调整这些示例,以实现更复杂的文档自动化处理任务。


(三)**优点特性示例代码**


![在这里插入图片描述](https://img-blog.csdnimg.cn/0905e6925e844177b6d93181e4fb8dda.webp)


`python-docx`库的优点包括其轻量级、跨平台的特性,以及对`.docx`格式的全面支持和易用性。以下代码示例将进一步说明这些优点:


1. **轻量级**


`python-docx`库专注于`.docx`文件格式的处理,没有额外的依赖,安装方便,占用资源少。以下是如何快速安装并使用`python-docx`创建一个简单文档:



pip install python-docx



from docx import Document

创建新文档

doc = Document()

添加段落

doc.add_paragraph(‘这是一个使用python-docx创建的简单文档。’)

保存文档

doc.save(‘simple_document.docx’)


2. **跨平台**


`python-docx`基于纯Python编写,因此可以在支持Python的任何操作系统(如Windows、macOS、Linux)上运行,无需依赖特定于平台的软件。下面是在不同操作系统上创建同一文档的示例:



无论在哪个操作系统上运行,这段代码都能创建相同的Word文档

from docx import Document

doc = Document()
doc.add_paragraph(‘跨平台创建的文档内容’)
doc.save(‘cross_platform_document.docx’)


3. **对.docx格式支持全面**


`python-docx`不仅支持创建基本的文本内容,还能够处理复杂的文档结构,如样式、列表、表格、图片、页眉/页脚、页码、分节符等。以下是一个包含多种元素的示例:



from docx import Document
from docx.shared import Inches

doc = Document()

添加标题

doc.add_heading(‘文档标题’, level=1)

添加样式化的段落

styled_para = doc.add_paragraph(‘强调文本’, style=‘Emphasis’)

添加有序列表

doc.add_paragraph(‘有序列表:’)
for i in range(3):
doc.add_paragraph(f’{i+1}. 列表项’, style=‘List Number’)

插入表格

table = doc.add_table(rows=2, cols=3)
for row in table.rows:
for cell in row.cells:
cell.text = f’Cell {row.index + 1}-{cell.column_index + 1}’

插入图片

doc.add_picture(‘image.jpg’, width=Inches(1), height=Inches(1))

添加页眉与页脚

header = doc.sections[0].header
footer = doc.sections[0].footer
header.add_paragraph(‘页眉内容’)
footer.add_paragraph(‘页脚内容’)

保存文档

doc.save(‘complex_document.docx’)


4. **易于使用**


`python-docx`提供了直观且易于理解的API,使得开发者可以快速上手,通过简单的函数调用来操作Word文档。以下是如何使用几个基本方法创建文档的示例:



from docx import Document

doc = Document()

添加段落

doc.add_paragraph(‘第一段’)
doc.add_paragraph(‘第二段’)

添加换行符

doc.add_paragraph(‘’).add_run(‘\n’) # 创建空段落并添加换行符

添加超链接

hyperlink = ‘https://www.example.com’
doc.add_paragraph('点击访问 ', style=‘Hyperlink’)
doc.add_paragraph(hyperlink, style=‘Hyperlink’, hyperlink_target=hyperlink)

保存文档

doc.save(‘easy_to_use_document.docx’)


这些示例代码充分体现了`python-docx`库的轻量级、跨平台、对`.docx`格式支持全面以及易于使用的优点。开发者可以利用这些特点,高效地完成各种Word文档自动化处理任务。


### 二、**使用`win32com`示例代码**


![在这里插入图片描述](https://img-blog.csdnimg.cn/cfe9f1aa59b64dedba9b57977a4d3266.png)


(一)**实现功能示例代码**


`win32com`库是Python中用于与Microsoft Office应用程序(如Word)进行交互的工具,通过COM(Component Object Model)接口实现。下面是一些使用`win32com`库操作Word文档的示例代码:


1. **安装与导入**


首先确保已经安装了`pywin32`库(包含`win32com`模块),可通过以下命令安装:



pip install pywin32


然后在Python脚本中导入相关模块:



import win32com.client


2. **创建新文档**



启动Word应用程序

word = win32com.client.Dispatch(‘Word.Application’)

创建一个新文档

doc = word.Documents.Add()

添加文本

doc.Range().InsertAfter(‘这是使用win32com创建的新文档内容’)

保存文档

doc.SaveAs(‘new_doc.docx’)

关闭文档(但保持Word应用程序运行)

doc.Close()

可选:关闭Word应用程序

word.Quit()


3. **打开并编辑现有文档**



启动Word应用程序

word = win32com.client.Dispatch(‘Word.Application’)

打开已有文档

doc = word.Documents.Open(‘existing_doc.docx’)

替换文本

search_text = ‘旧文本’
replace_text = ‘新文本’
find_obj = doc.Content.Find
find_obj.ClearFormatting()
find_obj.Text = search_text
while find_obj.Execute():
find_obj.Replacement.ClearFormatting()
find_obj.Replacement.Text = replace_text
find_obj.Execute(Replace=2) # 参数2表示替换

保存更改并关闭文档

doc.Save()
doc.Close()

可选:关闭Word应用程序

word.Quit()


4. **批量替换文档中的文本**



同上,启动Word应用程序和打开文档

定义一个字典,键为要查找的文本,值为对应的替换文本

replacements = {‘旧文本1’: ‘新文本1’, ‘旧文本2’: ‘新文本2’}

遍历字典,逐个执行替换操作

for search_text, replace_text in replacements.items():
find_obj = doc.Content.Find
find_obj.ClearFormatting()
find_obj.Text = search_text
while find_obj.Execute():
find_obj.Replacement.ClearFormatting()
find_obj.Replacement.Text = replace_text
find_obj.Execute(Replace=2)

保存更改并关闭文档

doc.Save()
doc.Close()

可选:关闭Word应用程序

word.Quit()


5. **合并多个文档**



启动Word应用程序

word = win32com.client.Dispatch(‘Word.Application’)

定义要合并的文档路径列表

documents_to_merge = [‘doc1.docx’, ‘doc2.docx’, ‘doc3.docx’]

创建一个新的空白文档作为目标文档

merged_doc = word.Documents.Add()

将每个源文档的内容复制并粘贴到目标文档末尾

for doc_path in documents_to_merge:
source_doc = word.Documents.Open(doc_path)
source_content = source_doc.Content
merged_content = merged_doc.Content
merged_content.Collapse(win32com.client.constants.wdCollapseEnd)
merged_content.FormattedText = source_content.FormattedText
source_doc.Close()

保存合并后的文档

merged_doc.SaveAs(‘merged_docs.docx’)

关闭目标文档并退出Word

merged_doc.Close()
word.Quit()


这些示例代码展示了如何使用`win32com`库与Word进行交互,包括创建新文档、打开并编辑现有文档、批量替换文本以及合并多个文档。由于`win32com`直接与Word应用程序通信,它可以操作Word支持的所有功能和文件格式(`.doc` 和 `.docx`),适用于需要高级功能或对旧版文件格式兼容性有要求的场景。请注意,使用`win32com`通常需要本地安装有Microsoft Office。


(二) **主要操作示例代码**


![在这里插入图片描述](https://img-blog.csdnimg.cn/1d038ad621014e5babb1092fdbd03943.png)


以下是一些使用`win32com`库操作Word的示例代码,涵盖了新建、打开、编辑、保存文档,应用样式和格式,执行宏,控制用户界面,以及转换文档格式等操作:


1. **新建、打开、编辑、保存文档**



import win32com.client

启动Word应用程序

word = win32com.client.Dispatch(‘Word.Application’)

新建文档

doc = word.Documents.Add()
doc.Range().InsertAfter(‘这是新建文档的内容’)

保存文档

doc.SaveAs(‘new_doc.docx’)

打开已有文档

existing_doc = word.Documents.Open(‘existing_doc.docx’)
existing_doc.Range().InsertAfter(‘\n这是追加到已有文档的内容’)

保存并关闭文档

existing_doc.Save()
existing_doc.Close()

关闭Word应用程序

word.Quit()


2. **应用复杂样式和格式**



启动Word并打开文档(同上)

应用预定义样式

paragraph = doc.Paragraphs.Add()
paragraph.Range().Text = ‘这是一个标题’
paragraph.Style = ‘Heading 1’

自定义格式化

run = paragraph.Range()
run.Bold = True
run.Font.ColorIndex = 2 # 蓝色
run.Font.Size = 14

保存并关闭文档(同上)


3. **执行宏**



启动Word并打开文档(同上)

执行宏(假设宏名为’MyMacro’)

word.Run(‘MyMacro’)

保存并关闭文档(同上)


4. **控制用户界面(显示对话框)**



启动Word并打开文档(同上)

显示“查找和替换”对话框

word.Dialogs(win32com.client.constants.wdDialogEditFind).Show()

保存并关闭文档(同上)


5.**转换文档格式(如转为PDF)**



启动Word并打开文档(同上)

将文档保存为PDF

doc.SaveAs(‘document.pdf’, FileFormat=17) # 17对应PDF格式

保存并关闭文档(同上)


请注意,上述代码示例假设您已经熟悉`win32com`库的基本使用,并在本地计算机上安装了Microsoft Word。由于`win32com`直接与Word应用程序交互,因此能够实现对Word的深度控制,包括应用复杂的样式和格式、执行宏、控制用户界面,以及转换文档格式等操作。这些功能往往在需要完全模拟用户操作或利用Word内部功能进行复杂处理时非常有用。记得在完成操作后关闭Word应用程序以释放资源。  
 (三)**优点特性示例代码**


![在这里插入图片描述](https://img-blog.csdnimg.cn/112335aa7811493c9765ef2b7652322f.png)


`win32com`库作为Python与Microsoft Office应用程序(如Word)进行交互的工具,具有以下优点:


1. **功能强大**:几乎可以实现与Word程序本身相同的功能,这意味着它可以处理Word支持的所有功能和文件格式(包括 `.doc` 和 `.docx`),以及进行高级格式化、交互式操作等。
2. **处理旧版 `.doc` 文件**:对于需要处理较早版本Word文档(`.doc` 格式)的情况,`win32com`库是一个理想的选择,因为它直接与Word应用程序通信,不受限于特定文件格式的支持。
3. **高级格式化**:能够应用复杂的样式和格式,包括但不限于字体、颜色、大小、段落样式、表格样式、列表样式、页面布局等。
4. **交互式操作**:能够执行宏、控制Word的用户界面(如显示对话框),实现与用户交互类似的操作。


![在这里插入图片描述](https://img-blog.csdnimg.cn/2a14ecf3228c4a15aefe37a3458a4e9c.png)


然而,`win32com`库也存在一些限制:


1. **依赖本地安装的Office套件**:使用`win32com`处理Word文档需要在本地计算机上安装完整的Microsoft Office套件。如果目标环境中没有Office,或者仅安装了Office的某些组件(如仅安装了Word,未安装Excel或PowerPoint),可能会导致功能受限或无法使用。
2. **主要在Windows平台上使用**:尽管`win32com`理论上也可在其他支持COM的平台上使用,但其主要设计目的是与Windows操作系统上的Microsoft Office应用程序交互。在非Windows环境中(如Linux或macOS),使用`win32com`可能存在兼容性问题,或者需要额外的配置和工具(如 Wine)来模拟Windows环境。


![在这里插入图片描述](https://img-blog.csdnimg.cn/59def1d1f8d04af999905301037d999a.png)


以下是一些示例代码,展示了`win32com`库如何实现高级格式化和交互式操作:


1. **高级格式化示例**



import win32com.client

启动Word应用程序

word = win32com.client.Dispatch(‘Word.Application’)

新建文档

doc = word.Documents.Add()

添加一段文本并应用复杂格式

paragraph = doc.Paragraphs.Add()
paragraph.Range().Text = ‘这是应用复杂格式的文本’
run = paragraph.Range()

字体属性

run.Font.Name = ‘Arial’
run.Font.Size = 14
run.Font.Bold = True
run.Font.Italic = True
run.Font.ColorIndex = 3 # 红色

段落属性

paragraph.Format.SpaceAfter = 18 # 空行18磅
paragraph.Format.Alignment = 2 # 居中对齐

保存文档

doc.SaveAs(‘formatted_doc.docx’)

关闭文档并退出Word

doc.Close()
word.Quit()


2. **交互式操作示例:显示“查找和替换”对话框**



import win32com.client

启动Word应用程序

word = win32com.client.Dispatch(‘Word.Application’)

显示“查找和替换”对话框

word.Dialogs(win32com.client.constants.wdDialogEditFind).Show()

关闭Word

word.Quit()


这些示例代码展示了`win32com`库如何实现与Word程序相同的功能,包括高级格式化和交互式操作。然而,请注意其对本地安装的Office套件的依赖,以及主要在Windows平台上使用的特性。在选择使用`win32com`时,应确保目标环境满足这些条件。如果需要跨平台或无Office环境下的解决方案,可以考虑使用如`python-docx`这样的库。


### 三、使用comtypes示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/3f822e7c96514df08dbe6683277a7dc8.png)


(一)**实现功能示例代码**


`comtypes`库同样允许Python通过COM接口与Microsoft Office应用程序(如Word)进行交互,从而实现对Word文档的操作。以下是一些使用`comtypes`库操作Word文档的示例代码:


1. **安装与导入**


首先确保已经安装了`comtypes`库,可通过以下命令安装:



pip install comtypes


然后在Python脚本中导入相关模块:



import comtypes.client


2. **创建新文档**



创建Word应用程序实例

word = comtypes.client.CreateObject(‘Word.Application’)

设置是否可见

word.Visible = True # 若要在后台运行,设置为False

创建一个新文档

doc = word.Documents.Add()

添加文本

doc.Range().InsertAfter(‘这是使用comtypes创建的新文档内容’)

保存文档

doc.SaveAs(‘new_doc.docx’)

关闭文档(但保持Word应用程序运行)

doc.Close()

可选:关闭Word应用程序

word.Quit()


3. **打开并编辑现有文档**



启动Word应用程序(同上)

打开已有文档

doc = word.Documents.Open(‘existing_doc.docx’)

替换文本

search_text = ‘旧文本’
replace_text = ‘新文本’
find_obj = doc.Range().Find
find_obj.ClearFormatting()
find_obj.Text = search_text
while find_obj.Execute():
find_obj.Replacement.ClearFormatting()
find_obj.Replacement.Text = replace_text
find_obj.Execute(Replace=2) # 参数2表示替换

保存更改并关闭文档

doc.Save()
doc.Close()

可选:关闭Word应用程序

word.Quit()


4. **批量替换文档中的文本**



同上,启动Word应用程序和打开文档

定义一个字典,键为要查找的文本,值为对应的替换文本

replacements = {‘旧文本1’: ‘新文本1’, ‘旧文本2’: ‘新文本2’}

遍历字典,逐个执行替换操作

for search_text, replace_text in replacements.items():
find_obj = doc.Range().Find
find_obj.ClearFormatting()
find_obj.Text = search_text
while find_obj.Execute():
find_obj.Replacement.ClearFormatting()
find_obj.Replacement.Text = replace_text
find_obj.Execute(Replace=2)

保存更改并关闭文档

doc.Save()
doc.Close()

可选:关闭Word应用程序

word.Quit()


这些示例代码展示了如何使用`comtypes`库与Word进行交互,包括创建新文档、打开并编辑现有文档、批量替换文本等操作。与`win32com`类似,`comtypes`通过COM接口直接与Word应用程序通信,可以操作Word支持的所有功能和文件格式(`.doc` 和 `.docx`),适用于需要高级功能或对旧版文件格式兼容性有要求的场景。同样需要注意的是,使用`comtypes`通常需要本地安装有Microsoft Office。


(二) **主要操作示例代码**


![在这里插入图片描述](https://img-blog.csdnimg.cn/64bb9d2e08d6470c8fe40b6ac17f9c54.png)


以下是一些使用`comtypes`库操作Word的示例代码,涵盖了新建、打开、编辑、保存文档,应用样式和格式,执行宏,控制用户界面,以及转换文档格式等操作:


1. **新建、打开、编辑、保存文档**



import comtypes.client

创建Word应用程序实例

word = comtypes.client.CreateObject(‘Word.Application’)

设置是否可见

word.Visible = True # 若要在后台运行,设置为False

新建文档

doc = word.Documents.Add()
doc.Range().InsertAfter(‘这是新建文档的内容’)

保存文档

doc.SaveAs(‘new_doc.docx’)

打开已有文档

existing_doc = word.Documents.Open(‘existing_doc.docx’)
existing_doc.Range().InsertAfter(‘\n这是追加到已有文档的内容’)

保存并关闭文档

existing_doc.Save()
existing_doc.Close()

关闭Word应用程序

word.Quit()


2. **应用复杂样式和格式**



启动Word并打开文档(同上)

应用预定义样式

paragraph = doc.Paragraphs.Add()
paragraph.Range().Text = ‘这是一个标题’
paragraph.Range().Style = ‘Heading 1’

自定义格式化

run = paragraph.Range()
run.Font.Bold = True
run.Font.Color = RGB(0, 0, 255) # 蓝色
run.Font.Size = 14

保存并关闭文档(同上)


3. **执行宏**



启动Word并打开文档(同上)

执行宏(假设宏名为’MyMacro’)

word.Run(‘MyMacro’)

保存并关闭文档(同上)


4. **控制用户界面(显示对话框)**



启动Word并打开文档(同上)

显示“查找和替换”对话框

word.Dialogs(comtypes.gen.Word.WdWordDialog.wdDialogEditFind).Show()

保存并关闭文档(同上)


5. **转换文档格式(如转为PDF)**



启动Word并打开文档(同上)

将文档保存为PDF

doc.SaveAs(‘document.pdf’, FileFormat=17) # 17对应PDF格式

保存并关闭文档(同上)


请注意,上述代码示例假设您已经熟悉`comtypes`库的基本使用,并在本地计算机上安装了Microsoft Word。由于`comtypes`直接与Word应用程序交互,因此能够实现对Word的深度控制,包括应用复杂的样式和格式、执行宏、控制用户界面,以及转换文档格式等操作。这些功能往往在需要完全模拟用户操作或利用Word内部功能进行复杂处理时非常有用。记得在完成操作后关闭Word应用程序以释放资源。


(三)**优点特性示例代码**


![在这里插入图片描述](https://img-blog.csdnimg.cn/e27ff04eb2e94324941ae6c91b1a67bf.png)


`comtypes`库作为Python与Microsoft Office应用程序(如Word)进行交互的工具,具有以下优点:


1. **功能强大**:几乎可以实现与Word程序本身相同的功能,这意味着它可以处理Word支持的所有功能和文件格式(包括 `.doc` 和 `.docx`),以及进行高级格式化、交互式操作等。
2. \*\*处理旧版 `.doc` 文件 \*\*:对于需要处理较早版本Word文档(`.doc` 格式)的情况,`comtypes`库是一个理想的选择,因为它直接与Word应用程序通信,不受限于特定文件格式的支持。
3. **高级格式化**:能够应用复杂的样式和格式,包括但不限于字体、颜色、大小、段落样式、表格样式、列表样式、页面布局等。
4. **交互式操作**:能够执行宏、控制Word的用户界面(如显示对话框),实现与用户交互类似的操作。


然而,`comtypes`库也存在一些限制:


1. **依赖本地安装的Office套件**:使用`comtypes`处理Word文档需要在本地计算机上安装完整的Microsoft Office套件。如果目标环境中没有Office,或者仅安装了Office的某些组件(如仅安装了Word,未安装Excel或PowerPoint),可能会导致功能受限或无法使用。
2. **主要在Windows平台上使用**:尽管`comtypes`理论上也可在其他支持COM的平台上使用,但其主要设计目的是与Windows操作系统上的Microsoft Office应用程序交互。在非Windows环境中(如Linux或macOS),使用`comtypes`可能存在兼容性问题,或者需要额外的配置和工具(如 Wine)来模拟Windows环境。


![在这里插入图片描述](https://img-blog.csdnimg.cn/a26965e9016e40fbbcf3c42cc2bd00a6.jpg)


以下是一些示例代码,展示了`comtypes`库如何实现高级格式化和交互式操作:


1. **高级格式化示例**



import comtypes.client

创建Word应用程序实例

word = comtypes.client.CreateObject(‘Word.Application’)

新建文档

doc = word.Documents.Add()

添加一段文本并应用复杂格式

paragraph = doc.Paragraphs.Add()
paragraph.Range().Text = ‘这是应用复杂格式的文本’
run = paragraph.Range()

字体属性

run.Font.Name = ‘Arial’
run.Font.Size = 14
run.Font.Bold = True
run.Font.Italic = True
run.Font.Color = RGB(255, 0, 0) # 红色

段落属性

paragraph.Range.ParagraphFormat.SpaceAfter = 18 # 空行18磅
paragraph.Range.ParagraphFormat.Alignment = 2 # 居中对齐

保存文档

doc.SaveAs(‘formatted_doc.docx’)

关闭文档并退出Word

doc.Close()
word.Quit()


2. **交互式操作示例:显示“查找和替换”对话框**



import comtypes.client

创建Word应用程序实例

word = comtypes.client.CreateObject(‘Word.Application’)

显示“查找和替换”对话框

word.Dialogs(comtypes.gen.Word.WdWordDialog.wdDialogEditFind).Show()

关闭Word

word.Quit()


这些示例代码展示了`comtypes`库如何实现与Word程序相同的功能,包括高级格式化和交互式操作。然而,请注意其对本地安装的Office套件的依赖,以及主要在Windows平台上使用的特性。在选择使用`comtypes`时,应确保目标环境满足这些条件。如果需要跨平台或无Office环境下的解决方案,可以考虑使用如`python-docx`这样的库。


### 四、使用docx-mailmerge示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/bf7da9957da84f7c9c9a3110ee5c1128.png)


(一)**实现功能示例代码**  
 在Python中,可以使用第三方库如`docx-mailmerge`来实现Word邮件合并的功能。以下是一个使用`docx-mailmerge`库进行邮件合并的示例代码:



import pandas as pd
from mailmerge import MailMerge

1. 加载数据源(假设为CSV文件)

data = pd.read_csv(‘data.csv’)

2. 准备模板

template_file = ‘template.docx’

3. 初始化MailMerge对象

doc = MailMerge(template_file)

4. 定义数据字段映射

field_mapping = {
‘Name’: ‘姓名’,
‘Email’: ‘邮箱’,
‘Message’: ‘个性化信息’
} # 假设模板中使用的字段与数据源列名不完全一致,此处进行映射

5. 遍历数据源,逐条进行合并

for _, row in data.iterrows():
# 将数据行转换为字典,便于合并
merge_data = {field_mapping[k]: v for k, v in row.to_dict().items() if k in field_mapping}

# 执行邮件合并
doc.merge(\*\*merge_data)

# 生成并保存单个个性化文档
output_filename = f'output\_{row["ID"]}.docx'  # 使用ID或其他唯一标识作为文件名
doc.write(output_filename)

# 清空MailMerge对象,准备合并下一条数据
doc.clear_merge_fields()

或者,如果需要一次性生成所有文档到一个大的Word文档中,并用分页符隔开

(假设list\_temp已经包含了所有要合并的数据字典)

with MailMerge(template_file) as doc:

doc.merge_templates(list_temp, separator=‘page_break’)

doc.write(‘all_outputs.docx’)

6. (可选)发送合并后的文档作为电子邮件附件

使用例如smtplib和email库来构建并发送邮件


在这个示例中:


* 首先,我们使用`pandas`库加载数据源(这里假设为CSV文件)。
* 然后,指定Word模板文件的位置。
* 初始化一个`MailMerge`对象,传入模板文件路径。
* 定义数据字段与模板中占位符之间的映射关系(如果两者名称不直接对应)。
* 遍历数据源的每一行,将数据转化为字典形式,并通过`doc.merge()`方法将数据合并到模板中。
* 合并后,使用`doc.write()`方法将生成的个性化文档保存到指定路径,文件名可以包含来自数据源的唯一标识符(如ID)。
* 如果需要生成所有文档到一个大的Word文档中,并用分页符隔开,可以使用`merge_templates()`方法,传入数据字典列表以及分隔符。


请注意,实际使用时需要确保`docx-mailmerge`库已正确安装,可以通过`pip install docx-mailmerge`命令进行安装。同时,根据实际需求调整数据源类型、模板文件路径、字段映射、输出文件命名规则等细节。


(二)**主要操作示例代码**


![在这里插入图片描述](https://img-blog.csdnimg.cn/1a480650854f405e912b001d29921871.png)


为了准备一个包含占位符的Word模板,使用`docx-mailmerge`库自动填充模板并生成多个文档,您可以按照以下步骤操作:


**步骤 1:创建Word模板**


1. 打开Microsoft Word,新建一个空白文档。
2. 在文档中添加您希望个性化的内容,如标题、正文、表格等。对于需要动态填充的部分,插入邮件合并域(占位符)。操作方法如下:


	* 点击顶部菜单栏中的“邮件”选项卡。
	* 在“编写和插入字段”区域,点击“插入合并域”。
	* 从弹出的列表中选择相应的字段名(如“姓名”、“地址”等),或者自定义字段名。Word会自动插入带有大括号 `{}` 包裹的占位符,如 `{Name}`、`{Address}`。示例模板内容可能如下:

 

尊敬的 {Name},

感谢您对我们的支持!以下是您的订单详情:

订单编号:{OrderID}
订单日期:{OrderDate}
商品名称:{ProductName}
数量:{Quantity}
单价:{UnitPrice}
总价:{TotalPrice}

如有任何问题,请随时联系我们的客服团队。

最诚挚的问候,
[Your Company Name]



**步骤 2:准备数据源(CSV文件)**


1. 使用Excel或其他支持CSV格式的软件创建一个CSV文件,包含与模板中占位符对应的列名和数据。

 示例CSV数据:

 

Name,OrderID,OrderDate,ProductName,Quantity,UnitPrice,TotalPrice
John Doe,12345,2024-03-¼,Product A,1,29.99,29.99
Jane Smith,67890,2024-03-½,Product B,3,19.99,59.97

 确保数据源的列名与Word模板中的合并域名称完全一致。


**步骤 3:使用`docx-mailmerge`库进行邮件合并**


1. 安装`docx-mailmerge`库(如果尚未安装):

 

pip install docx-mailmerge

2. 编写Python脚本,使用`docx-mailmerge`库读取模板文件、数据源,并生成多个文档。下面是一个示例脚本:

 

import csv
from mailmerge import MailMerge

模板文件路径

template_path = “template.docx”

数据源(CSV文件)路径

data_source_path = “data.csv”

初始化MailMerge对象

mail_merge = MailMerge(template_path)

读取CSV数据

with open(data_source_path, newline=‘’) as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
# 合并数据到模板
mail_merge.merge(row)

    # 生成并保存个性化文档
    output_file = f"{row['Name'].replace(' ', '\_')}\_order\_details.docx"
    mail_merge.write(output_file)

    # 清除已合并的数据,准备合并下一行
    mail_merge.clear_merge_fields()

print(“邮件合并完成,生成的文档已保存。”)

 这个脚本首先读取CSV数据源,然后遍历每一行,将行数据作为字典传递给`mail_merge.merge()`方法,填充模板。生成的个性化文档以客户的姓名(替换空格为下划线)加上“\_order\_details.docx”作为文件名保存。


执行上述Python脚本后,`docx-mailmerge`会根据提供的数据源自动填充Word模板,并为每个数据记录生成一个单独的文档。这些文档将保存在脚本运行的目录下,文件名如`John_Doe_order_details.docx`和`Jane_Smith_order_details.docx`。


至此,您已经成功使用`docx-mailmerge`库完成了基于Word模板和CSV数据源的邮件合并任务,生成了多个个性化的文档。


![在这里插入图片描述](https://img-blog.csdnimg.cn/07f4812bdf5346c8bf4a180c1a716247.jpg)


(三)**优点特性示例代码**


`docx-mailmerge`库具有以下显著优点,使得邮件合并过程得以简化,特别适用于制作批量信函、标签、报表等场景:


1. **简洁易用**:


	* 基于命令行界面,提供清晰的参数选项,无需复杂的编程知识即可快速上手。
	* Python API设计直观,易于理解,减少了学习成本。
2. **跨平台兼容**:


	* 支持Windows、macOS和Linux操作系统,能够在不同环境下无缝工作。
3. **多种数据源支持**:


	* 可以从CSV或JSON文件导入数据,便于与各种数据库或电子表格软件集成。
	* 支持通过管道传递数据,方便与其他命令行工具结合使用,进行数据预处理或实时生成。
4. **模板自定义灵活**:


	* 在Word文档中直接使用`{}`包围变量名作为占位符,无需深入理解复杂标记语言或特定模板语法。
	* 允许用户使用Word的全部功能设计模板,包括样式、表格、图片、图表等,保持专业文档的高质量外观。
5. **批量化处理高效**:


	* 一次性操作即可根据数据源生成大量定制化文档,极大地提高了工作效率。
	* 对大数据集处理性能良好,避免了手动重复劳动可能导致的错误和耗时。
6. **无需依赖Microsoft Word应用程序**:


	* `docx-mailmerge`作为一个独立库,能够直接解析和操作.docx文件,无需在目标机器上安装Word软件。
	* 这意味着可以在服务器、无GUI环境或非Windows平台上高效生成Word文档。


以下是一个使用`docx-mailmerge`库进行邮件合并的简单示例代码:



import csv
from mailmerge import MailMerge

模板文件路径

template_path = “letter_template.docx”

数据源(CSV文件)路径

data_source_path = “recipients.csv”

初始化MailMerge对象

mail_merge = MailMerge(template_path)

读取CSV数据

with open(data_source_path, newline=‘’) as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
# 合并数据到模板
mail_merge.merge(**row)

    # 生成并保存个性化文档
    output_file = f"{row['Name'].replace(' ', '\_')}\_letter.docx"
    mail_merge.write(output_file)

    # 清除已合并的数据,准备合并下一行
    mail_merge.clear_merge_fields()

print(“邮件合并完成,生成的文档已保存。”)


在这个示例中:


* 首先导入所需的库,并指定模板文件和数据源(CSV文件)的路径。
* 创建一个`MailMerge`对象,加载Word模板。
* 使用`csv.DictReader`读取CSV数据行作为字典。
* 对于每一条数据记录,调用`mail_merge.merge(**row)`方法,将字典中的键值对对应地填充到模板的占位符中。
* 根据数据中的`Name`字段生成个性化文档名,并使用`mail_merge.write(output_file)`保存生成的文档。
* 清除已合并的数据,以便循环处理下一条记录。
* 最后,输出消息告知用户邮件合并过程已完成。


这段代码展示了如何轻松地使用`docx-mailmerge`库批量生成个性化信函。同样的原理可以应用于制作标签、报表等其他应用场景,只需调整模板和数据源以适应具体需求即可。


### 五、基本操作示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/02dac9600a834682819addc9f6fea432.jpg)


要展示Python操作Word文档的基本操作,这里分别给出创建新文档并添加文本或内容以及修改已有文档的示例代码。我们将使用`python-docx`库来实现这些功能。


1. **创建新文档并添加文本或内容:**



from docx import Document

创建一个新文档

doc = Document()

添加一个空段落

doc.add_paragraph(‘这是文档中的第一段文字。’)

添加带有样式的段落

styled_paragraph = doc.add_paragraph(‘这是带样式的段落。’)
styled_paragraph.style = ‘Heading 1’

添加列表项

unordered_list = doc.add_paragraph(‘无序列表:’)
unordered_list.style = ‘List Bullet’
unordered_list.add_run(‘项目一’).italic = True
unordered_list.add_run(‘\n’)
unordered_list.add_run(‘项目二’)

添加表格

table = doc.add_table(rows=2, cols=3)
for row in table.rows:
for cell in row.cells:
cell.text = ‘单元格内容’

添加图片

image_path = ‘path_to_your_image.png’

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网络安全面试题

绿盟护网行动

还有大家最喜欢的黑客技术

网络安全源码合集+工具包

所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值