Python批量生成Word邀请函

编程 · 2023-08-17 · 177 人浏览

名单

姓名性别身份
张三嘉宾
李四媒体
王五嘉宾

实现代码

from docx import Document  # 创建文档
from docx.oxml.ns import qn  # 中文
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT  # 段落
from docx.shared import Pt, RGBColor, Mm, Cm  # 大小磅数/字号
from openpyxl import load_workbook

def template(name, sex, types):
    """
    创建模板
    - 先生/女士
    - 嘉宾/媒体
    """
    word = Document()  # 创建word文档对象
    word.styles['Normal'].font.name = u'微软雅黑'
    word.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')

    # 段落1
    p1 = word.add_paragraph()
    p1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
    # 添加文字
    run_text_1 = p1.add_run('客户大会')
    run_text_1.font.size = Pt(20)
    if types == '媒体':
        run_text_1.font.name = u'宋体'
        run_text_1._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

    # 段落2
    p2 = word.add_paragraph()
    p2.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
    # 添加文字
    run_text_2 = p2.add_run('邀请函')
    run_text_2.font.size = Pt(36)

    # 段落 customer
    p_customer = word.add_paragraph()
    p_customer.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
    # 添加文字
    if types == '嘉宾':
        run_text_c = p_customer.add_run(f'尊敬的 {name} {sex}')
    else:
        run_text_c = p_customer.add_run(f'尊敬的 {name} 老师')
        run_text_c.font.color.rgb = RGBColor(177, 23, 79)
    run_text_c.font.size = Pt(20)

    # 段落3
    p3 = word.add_paragraph()
    # 添加文字
    run_text_3 = p3.add_run('诚邀您参加由大学组织的客户答谢会。请于2022年10月10日在大学总部准时出席。')
    run_text_3.font.size = Pt(16)
    # 首行缩进
    p3.paragraph_format.first_line_indent = Cm(0.74)

    # 段落4 公司logo
    p4 = word.add_paragraph()
    p4.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
    # 添加文字
    run_text_4 = p4.add_run()
    run_text_4.add_picture('logo.jpg', width=Mm(40))
    if types == '嘉宾':
        word.save(f'VIP/{name}.docx')
    else:
        word.save(f'Media/{name}.docx')

def main():
    wb = load_workbook('list.xlsx')
    ws = wb.worksheets[0]
    for r in list(ws.iter_rows())[1:]:
        row = [data.value for data in r]
        if row[1] == '男':
            sex = '先生'
        else:
            sex = '女士'
        template(row[0], sex, row[2])

if __name__ == '__main__':
    main()
Python
Theme Jasmine by Kent Liao