1. 程式人生 > >python_docx生成word報告附word字號跟磅值對應關係

python_docx生成word報告附word字號跟磅值對應關係

本來想根據已有的word做模板,新增些新生成的資料進去,沒想明白是根據什麼找想替換或者插入的地方的,二來要插入的圖表文字也不少,所以乾脆所有的都現生成吧,由於沒怎麼考慮效率,做下來這樣也是可行的。
報告中會用到各種字號
WORD中字號、磅值,兩者具體的對應關係大約如下吧:
字號‘八號’對應磅值5
字號‘七號’對應磅值5.5
字號‘小六’對應磅值6.5
字號‘六號’對應磅值7.5
字號‘小五’對應磅值9
字號‘五號’對應磅值10.5
字號‘小四’對應磅值12
字號‘四號’對應磅值14
字號‘小三’對應磅值15
字號‘三號’對應磅值16
字號‘小二’對應磅值18
字號‘二號’對應磅值22
字號‘小一’對應磅值24
字號‘一號’對應磅值26
字號‘小初’對應磅值36
字號‘初號’對應磅值42
先裝上python_docx

sudo pip  install python-docx

程式碼:

#!/usr/bin/python
# coding=UTF-8

from docx import Document
from docx.shared import RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import  Pt
from docx.oxml import OxmlElement
from docx.oxml.ns import  qn
from docx.shared import Inches
from docx.shared import Cm
#開啟文件
document = Document()

#報告標題
head = document.add_heading()
head.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
head.paragraph_format.space_before = Pt(36)
run = head.add_run(u"生成的報告")
run.font.size=Pt(36)
run.font.color.rgb=RGBColor(0x00,0x00,0x00) #標題顏色
document.styles['Normal'].font.name = u'Arial' #字型1
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體') #漢字使用字型2->宋體
#新增分頁
document.add_page_break()

#二級標題
head2 = document.add_heading(level=2)
head2.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = head2.add_run(u'報告分析')
#run.font.name=u'宋體'
run.font.size=Pt(21)
run.font.color.rgb=RGBColor(14,106,85)
#段落後行距
head2.paragraph_format.space_after = Pt(30)

#二級級標題段落
#document.styles['Normal'].font.name = u'宋體'
p = document.add_paragraph()
run = p.add_run(u'''    段落1
	段落2''')
run.font.color.rgb = RGBColor(0, 0, 0)
run.font.size = Pt(15)
#單倍行距
p.paragraph_format.line_spacing = Pt(30)
#段落後行距
p.paragraph_format.space_after = Pt(30)

#三級標題
head3 = document.add_heading(level=3)
run = head3.add_run(u'分析物件:')
#run.font.name=u'宋體'
run.font.size=Pt(18)
run.font.color.rgb=RGBColor(0,0,0)
#段落後行距
head2.paragraph_format.space_after = Pt(30)
#基本資訊
document.add_picture('./image/1.png', width=Cm(15.24)) #設定圖片大小,這裡用的是cm釐米,比較直觀吧,反正我從來不懂Inches跟cm之間怎麼換,也不知他有多大

#設定中文字型
#run = paragraph.add_run(u'設定中文字型,')
#run.font.name=u'宋體'
#r = run._element
#r.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')
#設定粗體小四
paragraph = document.add_paragraph()
run = paragraph.add_run(u'MD5:  ')
run.bold = True
run.font.size=Pt(12)
paragraph = document.add_paragraph()
run = paragraph.add_run(u'TYPE:  ')
run.bold = True
run.font.size=Pt(12)
paragraph = document.add_paragraph()
run = paragraph.add_run(u'檔名稱:  ')
run.bold = True
run.font.size=Pt(12)
paragraph = document.add_paragraph()
run = paragraph.add_run(u'檔案大小:  ')
run.bold = True #加粗
run.font.size=Pt(12) #小四

#報告1
document.add_picture('./image/2.png', width=Cm(15.24))
paragraph = document.add_paragraph()
run = paragraph.add_run(u'判定:  ')
run.bold = True
run.font.size=Pt(12)

#報告2
document.add_picture('./image/3.png', width=Cm(15.24))
paragraph = document.add_paragraph()
run = paragraph.add_run(u'報告2:  ')
run.bold = True
run.font.size=Pt(12)

#分析總結
document.add_picture('./image/4.png', width=Cm(15.24))
paragraph = document.add_paragraph()
run = paragraph.add_run(u'分析結果:  ')
run.bold = True
run.font.size=Pt(12)

#檢測結果
document.add_picture('./image/5.png', width=Cm(15.24))
paragraph = document.add_paragraph()
run = paragraph.add_run(u'檢測結果:  ')
run.bold = True
run.font.size=Pt(12)

#關係
document.add_picture('./image/6.png', width=Cm(15.24))
paragraph = document.add_paragraph()
run = paragraph.add_run(u'關係:  ')
run.bold = True #加粗
run.font.size=Pt(12)#小四

#關鍵字串
document.add_picture('./image/7.png', width=Cm(15.24))
paragraph = document.add_paragraph()
run = paragraph.add_run(u'關鍵字串:  ')
run.bold = True
run.font.size=Pt(12)

head4 = document.add_heading(level=3)
run = head4.add_run(u'附件:')
run.font.size=Pt(18)
run.font.color.rgb=RGBColor(0,0,0)

#注1
head5 = document.add_heading(level=3)
run = head5.add_run(u'注1:')
run.font.size=Pt(15)
run.font.color.rgb=RGBColor(65,186,126)
head5.paragraph_format.line_spacing = Pt(30)

p = document.add_paragraph()
p.paragraph_format.line_spacing = Pt(30)
run = p.add_run(u'''    註解1段落''')
run.font.color.rgb = RGBColor(0, 0, 0)
run.font.size = Pt(12)

#注2
head6 = document.add_heading(level=3)
run = head6.add_run(u'注2:')
run.font.size=Pt(15)
run.font.color.rgb=RGBColor(65,186,126)
head6.paragraph_format.line_spacing = Pt(30)

p = document.add_paragraph()
p.paragraph_format.line_spacing = Pt(30)
run = p.add_run(u'''    註解2段落''')
run.font.color.rgb = RGBColor(0, 0, 0)
run.font.size = Pt(12)

#儲存檔案
document.save('demo.docx')

表格的操作沒用到,就不貼了,要用再找也不是多麻煩