小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

生活中的python-利用python-docx自動生成表格簡化工作流程

 heart_青 2020-03-15

背景

因為工作原因,需要經(jīng)常往兩個word模板里填寫內(nèi)容并生成新的word文件,模板大致如下圖:

老的工作流程:

打開兩個表,在表中對應(yīng)位置填寫個人信息,保存。這樣一來,當(dāng)需要填寫的信息比較多的時候,工作就會繁瑣。

新的工作流程:

利用python-docx編寫腳本,運行腳本-輸入個人信息-自動生成兩個word模板

腳本用到的python-docx庫的功能:

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

安裝python-docx:

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

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

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

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

from docx import Document
document = Document()

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

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

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

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

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

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

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

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

如果cell較多,無法直觀的看出坐標的話,可以用下列的代碼將每個cell的坐標都標注出來,方便合并

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方法可以得到一個表格的一行l(wèi)ist其中包含了這一行的所有cell

hdr_cells0 = table.rows[0].cells

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

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

上面已經(jīng)說過,合并的cell其實還是存在的。因為我所需要的表格第一個cell實際合并了(0,0)---(2,2)之間六個cell。所以hdr_cell0[0].add_paragraph其實就是向這六個cell里寫入內(nèi)容。

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

hdr_cells0[3].add_paragraph('院')

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

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

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

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

段落是word文件中主要的塊對象,圖片、表、標題、列表也是塊對象

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

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

       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

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

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

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

document = Document()#設(shè)置整個文檔的默認字體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對象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 來操作 docx, xlsx 格式文件(二)(使用 docx 庫操作 docx 格式文件)

2.使用表格—— 使用Python讀寫Office文檔之三

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多