日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

生活中的python-利用python-docx自動(dòng)生成表格簡(jiǎn)化工作流程

 heart_青 2020-03-15

背景

因?yàn)楣ぷ髟?,需要?jīng)常往兩個(gè)word模板里填寫(xiě)內(nèi)容并生成新的word文件,模板大致如下圖:

老的工作流程:

打開(kāi)兩個(gè)表,在表中對(duì)應(yīng)位置填寫(xiě)個(gè)人信息,保存。這樣一來(lái),當(dāng)需要填寫(xiě)的信息比較多的時(shí)候,工作就會(huì)繁瑣。

新的工作流程:

利用python-docx編寫(xiě)腳本,運(yùn)行腳本-輸入個(gè)人信息-自動(dòng)生成兩個(gè)word模板

腳本用到的python-docx庫(kù)的功能:

1、創(chuàng)建與合并表格
2、添加文本
3、設(shè)置文本屬性(如大小、加粗、下劃線、居中等)

安裝python-docx:

pip install python_docx
創(chuàng)建與合并表格

在python-docx中有表格對(duì)象(Table)。我們可以把一個(gè)表格看成M行(Row)N列(Column)的矩陣。

表格中的一個(gè)“格子”就是一個(gè)cell對(duì)象,同時(shí)它還有rows(行)和columns(列)屬性

首先創(chuàng)建一個(gè)新的文檔

from docx import Document
document = Document()

然后用Document類(lèi)的add_table方法增加一個(gè)表格,其中rows是行,cols是列,style表格樣式,具體可以查看官方文檔:

table = document.add_table(rows=37,cols=13,style='Table Grid')

上述代碼就在word里插入了一個(gè)37行、13列的表格。(有37*13=481個(gè)cell)

生成的每個(gè)cell都是有“坐標(biāo)”的,比如上面的表格左上角cell為(0,0),右下角cell為(36,12)

下面要做的就是合并一些cell,從而達(dá)到我們最終需要的表格

table.cell(0,0).merge(table.cell(2,2))

上述代碼就將cell(0,0)到cell(2,2)之間的所有cell合并成一個(gè)cell

這里需要注意的是,雖然每個(gè)cell都合并了,但其實(shí)它還是存在的。比如合并了(0,0)和(0,1)兩個(gè)cell,那么這個(gè)合并的cell其實(shí)就是(0,0;0,1)

如果cell較多,無(wú)法直觀的看出坐標(biāo)的話,可以用下列的代碼將每個(gè)cell的坐標(biāo)都標(biāo)注出來(lái),方便合并

document = Document()table = document.add_table(rows=37,cols=13,style='Table Grid')document.save('table-1.docx')document1 = Document('table-1.docx')table = document1.tables[0]for row,obj_row in enumerate(table.rows):
   for col,cell in enumerate(obj_row.cells):
       cell.text = cell.text + "%d,%d " % (row,col)document1.save('table-2.docx')
添加文本

將所有cell依次合并后,就需要向合并后的cell里添加文本。

用table的row方法可以得到一個(gè)表格的一行l(wèi)ist其中包含了這一行的所有cell

hdr_cells0 = table.rows[0].cells

上面代碼就得到了合并表格后的第一行所有cell,然后我們用hdr_cell0[0]就可以得到合并表格后的第一行的第一個(gè)cell。用add_paragraph方法即可像cell里添加文本

hdr_cells0[0].add_paragraph('院(系)\n')

上面已經(jīng)說(shuō)過(guò),合并的cell其實(shí)還是存在的。因?yàn)槲宜枰谋砀竦谝粋€(gè)cell實(shí)際合并了(0,0)---(2,2)之間六個(gè)cell。所以hdr_cell0[0].add_paragraph其實(shí)就是向這六個(gè)cell里寫(xiě)入內(nèi)容。

第二個(gè)cell合并的是(0,3)---(2,6)之間的cell。所以就應(yīng)該向(0,3)寫(xiě)入文本,其實(shí)向這之間任一一個(gè)cell寫(xiě)入文本都是可以的,所以應(yīng)該是

hdr_cells0[3].add_paragraph('院')

按照上面的方法依次類(lèi)推,就可以將所需表格的整體部分做成。

設(shè)置文本屬性(如大小、加粗、下劃線、居中等)

合并表格并且添加了所需文本后,下面就需要設(shè)置表格內(nèi)文本的各種屬性了,比如大小、加粗、下劃線、居中等

在python-docx中,word主要有兩種文本格式等級(jí):塊等級(jí)(block-level)和內(nèi)聯(lián)等級(jí)(inline-level)。word中大部分內(nèi)容都是由這兩種等級(jí)的對(duì)象組成。

段落是word文件中主要的塊對(duì)象,圖片、表、標(biāo)題、列表也是塊對(duì)象

內(nèi)聯(lián)對(duì)象是塊對(duì)象的組成部分塊對(duì)象的所有內(nèi)容都包含在內(nèi)聯(lián)對(duì)象中,一個(gè)塊對(duì)象由一個(gè)或多個(gè)內(nèi)聯(lián)對(duì)象組成

run 是常用的內(nèi)聯(lián)對(duì)象,例如:

       p = document.add_paragraph('This is paragraph')
       p.add_run('bold').bold = True
       p.add_run(' and some ').font.size = Pt(14)
       p.add_run('italic.').italic = True

這個(gè)例子中一個(gè)段落(塊對(duì)象)包含三個(gè) run(內(nèi)聯(lián)對(duì)象),每一個(gè) run 依次設(shè)置了粗體、大小、斜體三種屬性

具體設(shè)置run屬性直接用代碼說(shuō)明,更詳細(xì)的請(qǐng)直接查閱官方文檔

from docx import Documentfrom docx.shared import Inches, Ptfrom docx.enum.text import WD_ALIGN_PARAGRAPH

document = Document()#設(shè)置整個(gè)文檔的默認(rèn)字體document.styles['Normal'].font.name = u'宋體'document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')p1=document.add_paragraph()#設(shè)置p1段落居中p1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER#p1段落大小p1.paragraph_format.line_spacing = Pt(25) #給p1段落添加run對(duì)象r1,并設(shè)置文本r1 =p1.add_run('添加文本\r添加文本\n')#文字大小r1.font.size = Pt(16)#粗體r1.bold = True#下劃線r1.font.underline = True

源代碼已上傳至:
https://github.com/juventusryp/python-in-life

參考鏈接:

1.用 python 來(lái)操作 docx, xlsx 格式文件(二)(使用 docx 庫(kù)操作 docx 格式文件)

2.使用表格—— 使用Python讀寫(xiě)Office文檔之三

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多