# -*- 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)