Python办公自动化实战 01 | Python-docx库:Python与Word的完美结合1

本文参考(12条消息) Python办公自动化实战 04 | Python-docx库:Python与Word的完美结合_综合案例快速上手_跟风舞烟学编程的博客-CSDN博客_python-docx库环境c

对原文中的页边距、字体字号、空格、首行空格、段落前后行距等进行了修改。

import docx
from docx import Document    #用于新建文档
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT   #对齐库
from docx.shared import Pt, RGBColor   #导入字号,颜色库,注意大小写
from docx.oxml.ns import qn   #导入中文格式库
from docx.enum.text import WD_LINE_SPACING  #docx文档的行间距模式设置常量
from docx.shared import Cm #docx文档页边距
import time   #用来确定时间
from datetime import datetime
import datetime

#基础数据
students = ['学生A', '学生B', '学生C']
mothers = ['家长A', '家长B', '家长C']
startDate0 = input('请输入放假开始时间(如:2021-7-1):')  #input输入的为字符串
endDate0 = input('请输入放假结束时间(如:2021-9-1):')
teacher = input('请输入老师名称:')

# 计算放假结束时间加一天后的入学报到时间
# 伪代码:nextDate = 将endDate这个字符串转换为日期时间类型 + 一天
startDate= '{0}年{1}月{2}日'.format(startDate0[0:4], startDate0[5:7],startDate0[-2::]) # 放假时间
endDate='{0}年{1}月{2}日'.format(endDate0[0:4], endDate0[5:7],endDate0[-2::]) # 收假时间
nextDate = datetime.datetime.strptime(endDate0, '%Y-%m-%d') + datetime.timedelta(days=+1)
openSchool = '{0}月{1}日'.format(nextDate.month, nextDate.day) # 开学时间
today = time.strftime('%Y{y}%m{m}%d{d}', time.localtime()).format(y='年',m='月',d='日') # 得到今天的时间,
# 并将其格式化为0000年-00月-00日.因time库对中文支持差,要出现年月日中文形式,要用到format.

# 创建文档对象
document = Document()
# 向document文档写入数据的过程
# 设置全局样式
document.styles['Normal'].font.name = 'Times New Roman'    #英文和数字的字体设置;也可以直接设置仿宋_GB2312等中文格式
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋_GB2312')   #指定全文非标题(即正文)中文字体进行格式设置。仿宋_GB2312
document.styles['Normal'].font.size = Pt(16)   #字号    14:四号;16:三号;22号:二号
document.styles['Normal'].font.color.rgb = RGBColor(0, 0, 0)   #颜色黑色
document.styles['Normal'].paragraph_format.line_spacing = Pt(30)  # 若=1则行距为1行;若=docx.shared.Pt(30)则行距为30磅
document.styles['Normal'].paragraph_format.space_after = Pt(0)  # 段后距离0磅
document.styles['Normal'].paragraph_format.space_before = Pt(0)  # 段前距离0磅
document.sections[0].top_margin = Cm(3.0)  #新建一个空白文档,那么默认是只有一个节,如果这里没有[0],会报错
document.sections[0].bottom_margin = Cm(3.0)
document.sections[0].left_margin = Cm(2.6)
document.sections[0].right_margin = Cm(2.6)
#print('上',document.sections[0].top_margin.cm,'下',document.sections[0].bottom_margin.cm,'左',document.sections[0].left_margin.cm,'右',document.sections[0].right_margin.cm)
#也可以用下面这个表达式,注意如果后面不加.cm,输出的数字就不是cm
print('上%.2fcm,下%.2fcm,左%.2fcm,右%.2fcm.'% (document.sections[0].top_margin,document.sections[0].bottom_margin.cm,document.sections[0].left_margin.cm,document.sections[0].right_margin.cm))

# 循环创建文档
for i in range(len(students)):
    # 创建通知标题
    #p1 = document.add_heading('{0}学生放假通知书'.format(students[i]))
    p1 = document.add_paragraph()   #初始化第一个自然段
    p1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  #对齐方式
    p1.paragraph_format.space_after = Pt(16)  # 标题段后16磅
    run1 = p1.add_run('{0}学生放假通知书'.format(students[i]))
    run1.font.name = u"方正小标宋简体"   #run1.font.name = "方正小标宋简体" 必须放在run1._element.rPr.rFonts.set(qn('w:eastAsia'),
    # u'方正小标宋简体')的前面,即需要先设置字体名字这个属性,再进行中文字体设置。
    run1._element.rPr.rFonts.set(qn('w:eastAsia'), u'方正小标宋简体')
    run1.font.size = Pt(22)  #此处run1不能换成p1,否则会出现AttributeError: 'Paragraph' object has no attribute 'font'

    # 创建抬头
    p2 = document.add_paragraph('尊敬的同学家长:')
    run1 = p2.add_run(mothers[i])
    run1.font.bold = True

    # 通知内容
    #p3 = document.add_paragraph('我校根据上级要求,决定从%s开始放寒假,下学期于%s开学报到。%s正式上课。' % (startDate, endDate, openSchool))
    #也可以用f-string方法拼接变量更为简洁。
    p3 = document.add_paragraph(f'我校根据上级要求,决定从{startDate}开始放寒假,下学期于{endDate}开学报到。{openSchool}正式上课。')
    p3.paragraph_format.first_line_indent = p3.style.font.size * 2

    p3.line_spacing_rule = WD_LINE_SPACING.EXACTLY  # 固定值
    #p3.paragraph_format.line_spacing = docx.shared.Pt(30)  # 若=1则行距为1行;若=docx.shared.Pt(30)则行距为30磅
    p3.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY  #LEFT,RIGHT,CENTER,JUSTIFY(两端对齐),DISTRIBUTE(分散对齐)

    # 通知落款-1
    p4 = document.add_paragraph()
    p4.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
    run2 = p4.add_run(today)

    # 通知落款-2
    p5 = document.add_paragraph()
    p5.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
    run3 = p5.add_run(teacher)

    document.save('{0}-学生放假通知书.docx'.format(students[i]))

word文本样式为: 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值