【python】【WORD】用python在word中批量创建样式

文章目录

  • 1 期刊的格式要求
  • 2 样式格式及相关语句梳理
  • 3 生成效果
  • 4 代码
  • 5 官方文档地址

1 期刊的格式要求

【python】【WORD】用python在word中批量创建样式_第1张图片

2 样式格式及相关语句梳理

此处用到excel的一个命令,合并多个单元格的每行,跨越合并
【python】【WORD】用python在word中批量创建样式_第2张图片
在 Excel 中,跨越合并是一种单元格合并的方式,它可以将多个单元格中的内容合并到一个单元格中,从而使得单元格具有更大的显示区域。

跨越合并通常用于需要显示较大文本、标题或其他重要信息的情况。它可以使得单元格的显示更加美观和易读,也可以节省一些空间。

【python】【WORD】用python在word中批量创建样式_第3张图片

3 生成效果

【python】【WORD】用python在word中批量创建样式_第4张图片

4 代码

import docx
from docx.enum.style import WD_STYLE_TYPE
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
from docx.shared import Pt

# 5 创建一个新的文档
doc = docx.Document()

# 6 1) 题目
title = '示例标题'
title_style = doc.styles.add_style('题目', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
title_style.font.name = '黑体'
title_style._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')
title_style._element.rPr.rFonts.set(qn('w:ascii'), 'Times New Roman')
title_style._element.rPr.rFonts.set(qn('w:hAnsi'), 'Times New Roman')
title_style.font.size = docx.shared.Pt(20)
# 7 title_style.font.bold = True
title_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.CENTER
title_paragraph = doc.add_paragraph(title, style='题目')
#单倍行距
title_style.paragraph_format.line_spacing_rule = docx.enum.text.WD_LINE_SPACING.SINGLE

# 8 2) 作者姓名
author_name = '作者姓名'
author_name_style = doc.styles.add_style('作者姓名', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
author_name_style.font.name = '仿宋'
author_name_style._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')
author_name_style._element.rPr.rFonts.set(qn('w:ascii'), 'Times New Roman')
author_name_style._element.rPr.rFonts.set(qn('w:hAnsi'), 'Times New Roman')
author_name_style.font.size = docx.shared.Pt(10)
author_name_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.CENTER
author_name_paragraph = doc.add_paragraph(author_name, style='作者姓名')
#单倍行距
author_name_style.paragraph_format.line_spacing_rule = docx.enum.text.WD_LINE_SPACING.SINGLE

# 9 3) 单位及邮政编码
organization_and_zip = '单位及邮政编码'
org_and_zip_style = doc.styles.add_style('单位及邮政编码', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
org_and_zip_style.font.name = '仿宋'
org_and_zip_style._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')
org_and_zip_style._element.rPr.rFonts.set(qn('w:ascii'), 'Times New Roman')
org_and_zip_style._element.rPr.rFonts.set(qn('w:hAnsi'), 'Times New Roman')
org_and_zip_style.font.size = docx.shared.Pt(9)
org_and_zip_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.CENTER
org_and_zip_style.paragraph_format.line_spacing_rule = docx.enum.text.WD_LINE_SPACING.SINGLE
org_and_zip_paragraph = doc.add_paragraph(organization_and_zip, style='单位及邮政编码')

# 10 注意:以下部分的内容需要你自行填充,这里仅给出了样式设置的例子
# 11 4) 中文摘要、关键词、中图分类号字体
ch_abstract_and_keys = '中文摘要、关键词、中图分类号字体'
ch_abs_and_keys = doc.styles.add_style('中文摘要、关键词、中图分类号字体', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
ch_abs_and_keys.font.name = '黑体'
ch_abs_and_keys._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')
ch_abs_and_keys.font.size = docx.shared.Pt(9)
ch_abs_and_keys.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.LEFT
ch_abs_and_keys.paragraph_format.line_spacing_rule = docx.enum.text.WD_LINE_SPACING.SINGLE
ch_abstract_and_keys = doc.add_paragraph(ch_abstract_and_keys, style='中文摘要、关键词、中图分类号字体')
# 12 4) 中文摘要、关键词、中图分类号内容
ch_abstract_and_keys_content = '中文摘要、关键词、中图分类号内容'
ch_abs_and_keys_content = doc.styles.add_style('中文摘要、关键词、中图分类号内容', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
ch_abs_and_keys_content.font.name = '宋体'
ch_abs_and_keys_content._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
ch_abs_and_keys_content.font.size = docx.shared.Pt(11)
ch_abs_and_keys_content.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.JUSTIFY #两端对齐
ch_abs_and_keys_content.paragraph_format.line_spacing_rule = docx.enum.text.WD_LINE_SPACING.EXACTLY  # 设置行距规则为固定值
ch_abs_and_keys_content.paragraph_format.line_spacing = docx.shared.Pt(11)  # 设置行距为 21 磅
ch_abstract_and_keys_content = doc.add_paragraph(ch_abstract_and_keys_content, style='中文摘要、关键词、中图分类号内容')

# 13 5) 英文题目
en_title = 'en_title'
en_title_style = doc.styles.add_style('英文题目', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
en_title_style.font.name = 'Times New Roman'
en_title_style.font.size = docx.shared.Pt(18)
en_title_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.CENTER
en_title_paragraph = doc.add_paragraph(en_title, style='英文题目')
en_title_style.paragraph_format.line_spacing_rule = docx.enum.text.WD_LINE_SPACING.SINGLE

# 14 6) 作者英文(或拼音)姓名
en_author_name = 'en_author_names'
en_author_name_style = doc.styles.add_style('作者英文(或拼音)姓名', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
en_author_name_style.font.name = 'Times New Roman'
en_author_name_style.font.size = docx.shared.Pt(9)
en_author_name_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.CENTER
en_author_name_style.paragraph_format.line_spacing_rule = docx.enum.text.WD_LINE_SPACING.SINGLE
en_author_name_paragraph = doc.add_paragraph(en_author_name, style='作者英文(或拼音)姓名')

# 15 7) 单位、邮政编码及国别
en_organization_and_zip = 'Unit, zip code and country'
en_org_and_zip_style = doc.styles.add_style('Unit, zip code and country', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
en_org_and_zip_style.font.name = 'Times New Roman'
en_org_and_zip_style.font.size = docx.shared.Pt(9)
en_org_and_zip_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.CENTER
en_org_and_zip_style.paragraph_format.line_spacing_rule = docx.enum.text.WD_LINE_SPACING.SINGLE
en_org_and_zip_paragraph = doc.add_paragraph(en_organization_and_zip, style='Unit, zip code and country')

# 16 8) 英文摘要、关键词
en_abstract_and_keys = 'en_abstract_and_keys'
en_abs_and_keys = doc.styles.add_style('英文摘要、关键词', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
en_abs_and_keys.font.name = 'Times New Roman'
en_abs_and_keys.font.size = docx.shared.Pt(10)
en_abs_and_keys.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.JUSTIFY
en_abs_and_keys.paragraph_format.line_spacing_rule = docx.enum.text.WD_LINE_SPACING.SINGLE
en_abstract_and_keys_paragraph = doc.add_paragraph(en_abstract_and_keys, style='英文摘要、关键词')

# 17 9) 论文一级标题
heading1_style = doc.styles.add_style('一级标题', WD_STYLE_TYPE.PARAGRAPH)
heading1_style.font.name = '宋体'
heading1_style._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
heading1_style._element.rPr.rFonts.set(qn('w:ascii'), 'Times New Roman')
heading1_style._element.rPr.rFonts.set(qn('w:hAnsi'), 'Times New Roman')
heading1_style.font.size = Pt(14)
# 18 添加一级标题
heading1 = '一级标题'
heading1_paragraph = doc.add_paragraph(style='一级标题')
heading1_run = heading1_paragraph.add_run(heading1)
# 19 设置标题样式和行距
heading1_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.JUSTIFY
heading1_style.paragraph_format.line_spacing_rule = docx.enum.text.WD_LINE_SPACING.EXACTLY  # 设置行距规则为固定值
heading1_style.paragraph_format.line_spacing = docx.shared.Pt(21)  # 设置行距为 21 磅


# 20 10) 论文二级标题
subheading = '二级标题'
subheading_style = doc.styles.add_style('二级标题', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
subheading_style.font.name = '黑体'
subheading_style._element.rPr.rFonts.set(docx.oxml.ns.qn('w:eastAsia'), '黑体')
# 21 首先将字体设置为宋体,然后分别为 East Asia(东亚文字,即中文)、ASCII(英文字符)和 High ANSI(英文字符)设置不同的字体。
# 22 这样就可以实现中文为宋体,英文为 Times New Roman 的字体设置。
subheading_style._element.rPr.rFonts.set(docx.oxml.ns.qn('w:ascii'), 'Times New Roman')
subheading_style._element.rPr.rFonts.set(docx.oxml.ns.qn('w:hAnsi'), 'Times New Roman')
subheading_style.font.size = docx.shared.Pt(9.5)
subheading_style.font.bold = True
subheading_paragraph = doc.add_paragraph(subheading, style='二级标题')
subheading_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.JUSTIFY

# 23 11) 论文三级标题
sub_subheading = '三级标题'
sub_subheading_style = doc.styles.add_style('三级标题', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
sub_subheading_style.font.name = '黑体'
sub_subheading_style._element.rPr.rFonts.set(docx.oxml.ns.qn('w:eastAsia'), '黑体')
# 24 首先将字体设置为宋体,然后分别为 East Asia(东亚文字,即中文)、ASCII(英文字符)和 High ANSI(英文字符)设置不同的字体。
# 25 这样就可以实现中文为宋体,英文为 Times New Roman 的字体设置。
sub_subheading_style._element.rPr.rFonts.set(docx.oxml.ns.qn('w:ascii'), 'Times New Roman')
sub_subheading_style._element.rPr.rFonts.set(docx.oxml.ns.qn('w:hAnsi'), 'Times New Roman')
sub_subheading_style.font.size = docx.shared.Pt(9.5)
sub_subheading_paragraph = doc.add_paragraph(sub_subheading, style='三级标题')
sub_subheading_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.JUSTIFY



# 26 9) 论文正文
content = '正文内容'
content_style = doc.styles.add_style('正文', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
content_style.font.name = '宋体'
content_style._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
content_style._element.rPr.rFonts.set(qn('w:ascii'), 'Times New Roman')
content_style._element.rPr.rFonts.set(qn('w:hAnsi'), 'Times New Roman')
content_style.font.size = docx.shared.Pt(9.5)
content_style.paragraph_format.line_spacing = docx.enum.text.WD_LINE_SPACING.SINGLE
# 27 设置段落首行缩进
content_style.paragraph_format.first_line_indent = docx.shared.Cm(0.75)
content_paragraph = doc.add_paragraph(content, style='正文')

# 28 10) 参考文献
# 29 添加一个名为“文献”的样式
literature_style = doc.styles.add_style('文献', WD_STYLE_TYPE.PARAGRAPH)
# 30 设置中文字体为宋体
literature_style.font.name = '宋体'
literature_style._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
# 31 设置英文字体为 Times New Roman
literature_style._element.rPr.rFonts.set(qn('w:ascii'), 'Times New Roman')
literature_style._element.rPr.rFonts.set(qn('w:hAnsi'), 'Times New Roman')
# 32 设置字体大小为小五(10.5 磅)
literature_style.font.size = Pt(10.5)
# 33 设置段落两端对齐
literature_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.JUSTIFY
# 34 设置段落行距
literature_style.paragraph_format.line_spacing = 1.5
# 35 添加一个使用“文献”样式的段落
content = "这是一个使用“文献”样式的段落。"
content_paragraph = doc.add_paragraph(content, style='文献')

# 36 11) 图名

graph_style = doc.styles.add_style('图名', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
graph_style.font.name = '宋体'
graph_style._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
graph_style._element.rPr.rFonts.set(qn('w:ascii'), 'Times New Roman')
graph_style._element.rPr.rFonts.set(qn('w:hAnsi'), 'Times New Roman')
graph_style.font.size = docx.shared.Pt(9.5)
graph_style.paragraph_format.line_spacing = 1
graph_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.JUSTIFY
graph = '这是一个图名'
graph_style_paragraph = doc.add_paragraph(graph, style='图名')

# 37 11) 表名

table_style = doc.styles.add_style('表名', docx.enum.style.WD_STYLE_TYPE.PARAGRAPH)
table_style.font.name = '宋体'
table_style._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
table_style._element.rPr.rFonts.set(qn('w:ascii'), 'Times New Roman')
table_style._element.rPr.rFonts.set(qn('w:hAnsi'), 'Times New Roman')
table_style.font.size = docx.shared.Pt(9.5)
table_style.paragraph_format.line_spacing = 1
table_style.paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.JUSTIFY
# 38 添加一个使用“表名”样式的段落
table = '这是一个表名'
table_style_paragraph = doc.add_paragraph(table, style='表名')

doc.save('example.docx')

5 官方文档地址

https://python-docx.readthedocs.io/en/latest/

你可能感兴趣的:(word,python,excel)