最终成型的Word编辑代码

# -*- coding: utf-8 -*-
# https://blog.csdn.net/weixin_45523154/article/details/101715076
# https://www.cnblogs.com/findeasy/archive/2013/01/02/4053123.html
# https://www.cnblogs.com/xied/p/12619571.html
from docx import Document
from docx import section
from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING
from docx.shared import Pt
from docx.shared import RGBColor
from docx.shared import Inches
from docx.oxml.ns import qn
from docx.text import run

# https://www.cnblogs.com/xconline/p/11919735.html  #设置页边距
# https://blog.csdn.net/wudechun/article/details/101796156

# Doc.add_heading("Python是什么东西???")
# Doc.add_paragraph("Python是一种面向对象的编程语言~~~")
# Doc.add_paragraph("Python ")
# Doc.add_paragraph("Python 对word进行操作")
# Doc.save("Python_word.docx")

def addRun(paragraph,str):
    run = paragraph.add_run(str)
    run.font.size = Pt(10)
    run.font.name = u'微软雅黑'
    run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')  # 注意,这两部都不可或缺
    run.font.bold = True

def addParaGraph2(Args,size):
    str = "\n".join(Args)  # 这里的'\n'会被当成软回车
    p = Doc.add_paragraph()  # 添加一个段落
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = p.add_run(str)
    run.font.size = Pt(size)
    run.font.name = u'微软雅黑'
    run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')  # 注意,这两部都不可或缺
    run.font.bold = True
    Doc.add_page_break()  # 添加分页符

def addParaGraph(Args,size):#添加一个段落,并设置段落的格式
    str = "\n".join(Args)#这里的'\n'会被当成软回车
    p = Doc.add_paragraph()#添加一个段落
    p.alignment = 0 #左对齐
    paragraph_format = p.paragraph_format
    paragraph_format.space_before = Pt(0)  # 段首间距
    paragraph_format.space_after = Pt(0)  # 段尾间距
    paragraph_format.line_spacing = 1 # 行间距, 这三行都必不可少

    run = p.add_run(str)
    run.font.size = Pt(size) #10,17
    run.font.name = u'微软雅黑'
    run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')  # 注意,这两部都不可或缺
    run.font.bold = True





#实例化一个word文档
Doc = Document()

#添加一个部分,并设置页面格式
# Doc.add_section()
sections = Doc.sections
Sec = sections[0]
Sec.left_margin = Inches(0.08)  #页边距,左
Sec.right_margin = Inches(0.08) #页边距,右
Sec.bottom_margin = Inches(0.04) #页边距,下
Sec.top_margin = Inches(0.04) #页边距,上

Sec.page_height = Inches(1.182) #高
Sec.page_width = Inches(2.05) #宽


affi = ['报告主要结果页','病案本存档使用']
info1 = ['检测项目:OseqTM-T肺癌个体化诊疗基因检测(11基因)','申请医生:XXX','报告日期:2019/11/20']
info2 = ['科室:大院胃肠外科','姓名:郑钦','卡号:0382948','电话:18030263773']
addParaGraph2(affi,17)
# Doc.add_page_break() #添加分页符
addParaGraph(info1,10)
addParaGraph(info2,10)

Doc.save("设置字体.docx")

'''
p = Doc.add_paragraph()
#调整行距: https://jingyan.baidu.com/article/f3e34a126c908eb4eb6535c4.html
# https://blog.csdn.net/rufengzizai521/article/details/89372113
# https://www.cnblogs.com/shunguo/p/11399308.html    #换行
paragraph_format=p.paragraph_format
paragraph_format.space_before=Pt(5)    #上行间距
paragraph_format.space_after=Pt(0)    #下行间距
# paragraph_format.line_spacing=Pt(18)  #行距

p.alignment = 0 #http://www.chinaoc.com.cn/p/1196559.html 对齐方式
run=p.add_run('检测项目:OseqTM-T肺癌个体化诊疗基因检测(11基因)\n申请医生:XXX\n报告日期:2019/11/20')
# addRun(p,'检测项目:OseqTM-T肺癌个体化诊疗基因检测(11基因)'); run.add_break(run.WD_BREAK_TYPE.LINE)
# addRun(p,'申请医生:XXX'); run.add_break()
# addRun(p,'报告日期:2019/11/20'); run.add_break()

run.font.size = Pt(10)
run.font.name = u'微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑') #注意,这两部都不可或缺
run.font.bold = True
# Doc.add_page_break() #添加换页符
# Doc.add_break() #换行符
# Doc.add_break()





# # 添加标题
# head = Doc.add_heading(level=1) #添加标题
# run_head = head.add_run('这是标题')
# run_head.font.size = Pt(24)
# run_head.font.name = u'宋体' #这一行必须要有
# run_head._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') #这个才是真正的设置字体
# run_head.font.color.rgb = RGBColor(0,0,255)
# run_head.font.bold = False
#
# #添加段落
# p = Doc.add_paragraph()
# run=p.add_run('检测项目:Oseq™-T肿瘤个体化诊疗基因检测')
# run.font.size = Pt(11)
# run.font.name = u'微软雅黑'
# run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
# run.font.bold = True
#
# Doc.add_page_break() #添加分页符
'''


# p = Doc.add_paragragh()
# run=p.add_run('这段文字是宋体,')
# Doc.add_paragraph("检测项目:Oseq™-T肿瘤个体化诊疗基因检测")
# Doc.add_heading("这是一级标题",level=1)
# Doc.add_heading("这是二级标题",level=2)
# Doc.add_heading("这是三级标题",level=3)
# Doc.add_heading("这是四级标题",level=4)
# Doc.save("标题.docx")
#
#
# Doc = Document()
# Doc.add_heading("这是一个一级标题",level=1)
# Doc.add_paragraph("这是一个副标题","Subtitle")
# Doc.save("副标题.docx")
#
# from docx.enum.style import WD_STYLE_TYPE
# for i in Doc.styles:
#     if i.type == WD_STYLE_TYPE.CHARACTER:
#         print(WD_STYLE_TYPE.CHARACTER)


 再备份一份:

# -*- coding: utf-8 -*-
# https://blog.csdn.net/weixin_45523154/article/details/101715076
# https://www.cnblogs.com/findeasy/archive/2013/01/02/4053123.html
# https://www.cnblogs.com/xied/p/12619571.html
from docx import Document
from docx import section
from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING
from docx.shared import Pt
from docx.shared import RGBColor
from docx.shared import Inches
from docx.oxml.ns import qn
from docx.text import run

# https://www.cnblogs.com/xconline/p/11919735.html  #设置页边距
# https://blog.csdn.net/wudechun/article/details/101796156

# Doc.add_heading("Python是什么东西???")
# Doc.add_paragraph("Python是一种面向对象的编程语言~~~")
# Doc.add_paragraph("Python ")
# Doc.add_paragraph("Python 对word进行操作")
# Doc.save("Python_word.docx")

def addRun(paragraph,str,Doc):
    run = paragraph.add_run(str)
    run.font.size = Pt(10)
    run.font.name = u'微软雅黑'
    run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')  # 注意,这两部都不可或缺
    run.font.bold = True

def addParaGraph2(Args,size,Doc):#打印主要结果页
    str = "\n".join(Args)  # 这里的'\n'会被当成软回车
    p = Doc.add_paragraph()  # 添加一个段落
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = p.add_run(str)
    run.font.size = Pt(size)
    run.font.name = u'微软雅黑'
    run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')  # 注意,这两部都不可或缺
    run.font.bold = True
    Doc.add_page_break()  # 添加分页符。 注:由于前面的段落已经占满一页,分页符会产生一个空白页


def add_space(Args):
    for index,value in enumerate(Args):
        space = u'   '
        Args[index] = space + value
    return Args

def addParaGraph(Args,size,Doc,flag):#添加一个段落,并设置段落的格式
    # if flag == 2:
    #     Args = add_space(Args)
    str = "\n".join(Args)#这里的'\n'会被当成软回车
    p = Doc.add_paragraph()#添加一个段落
    p.alignment = 0 #左对齐
    paragraph_format = p.paragraph_format
    paragraph_format.space_before = Pt(0)  # 段首间距
    paragraph_format.space_after = Pt(0)  # 段尾间距
    paragraph_format.line_spacing = 1 # 行间距, 这三行都必不可少

    run = p.add_run(str)
    run.font.size = Pt(size) #10,17
    run.font.name = u'微软雅黑'
    run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')  # 注意,这两部都不可或缺
    run.font.bold = True




def generate_docx(List_for_docx,out_file):
    print('tag_file: {}'.format(out_file))
    #实例化一个word文档
    Doc = Document()

    #添加一个部分,并设置页面格式
    # Doc.add_section()
    sections = Doc.sections
    Sec = sections[0]
    Sec.left_margin = Inches(0.08)  #页边距,左
    Sec.right_margin = Inches(0.08) #页边距,右
    Sec.bottom_margin = Inches(0.04) #页边距,下
    Sec.top_margin = Inches(0.04) #页边距,上

    Sec.page_height = Inches(1.182) #高
    Sec.page_width = Inches(2.05) #宽


    affi = [u'报告主要结果页',u'病案本存档使用']
    addParaGraph2(affi, 17,Doc)
    # info1 = ['检测项目:OseqTM-T肺癌个体化诊疗基因检测(11基因)','申请医生:蔡彦','报告日期:2019/11/20']
    # info2 = ['科室:大院胃肠外科','姓名:郑钦','卡号:0382948','电话:18030263773']

    # Doc.add_page_break() #添加分页符
    title = [u'检测项目', u'申请医生', u'报告日期', u'科室', u'姓名', u'卡号', u'电话', u'样品编号']
    for lis_tmp in List_for_docx:
        lis_tmp = [u":".join(x) for x in zip(title,lis_tmp)] #中文字符,所以加一个'u'
        info1 = lis_tmp[0:3]
        info2 = lis_tmp[3:7]
        addParaGraph(info1,10.5,Doc,1)
        addParaGraph(info2,10.5,Doc,2)

    Doc.save(out_file)


#List_for_docx = [[u'肺癌组织20基因检测', u'黄锦鹏', u'2020-11-12', u'芳村二楼综合门诊', u'张四杰', u'66521712', u'13823303292', u'20S6952997'], [u'PD-L1免疫组化检测(Dako22C3)', u'黄锦鹏', u'2020-11-12', u'芳村二楼综合门诊', u'张四杰', u'66521712', u'13823303292', u'20S6952997']]
#out_file = "tag.docx"
#generate_docx(List_for_docx,out_file)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值