在實習工作中,遇到用python制作word模板的任務,其實說白了就是python-docx的使用。目前網上對這一個庫的介紹得很少,很零散,所以很多功能我是盡量參考其官網,但是官網上面很多功能目前只有說明文檔,而代碼并還沒有及時更新,以至于按照官網上面做了,python卻報錯。比如:自定義表格的高度。下面,我對我在此次工作任務中,所遇到的一些基本的功能分別做一下說明與展示。我用的是python2.7
1.創建文檔
- from docx import Document
- document = Document()
若括號里面寫入word文件路徑,則表明打開該文件
2.添加標題
document.add_heading('This is my title', 0)
但是,這個有個問題是標題下面有一條橫線,對于重度強迫癥的我是無法容忍的。所以我直接添加段落文字表示標題
3.添加段落文字
document.add_paragraph('my paragraph')
但是,這只實現了默認格式的段落文字添加,且這里的文字只能是英文。如果要設置中文字體,且對文字設置對齊,顏色,大小等設置,則:
- from docx.shared import RGBColor
- from docx.shared import Pt
- from docx.enum.text import WD_ALIGN_PARAGRAPH
- document.styles['Normal'].font.name = u'黑體' #可換成word里面任意字體
- p = document.add_paragraph()
- p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER #段落文字居中設置
- run = p.add_run(u'我添加的段落文字')
- run.font.color.rgb = RGBColor(54,95,145) #顏色設置,這里是用RGB顏色
- run.font.size = Pt(36) #字體大小設置,和word里面的字號相對應
4.添加圖片
pic = document.add_picture('pic.png',width = Inches(1.5)) #圖片和python文件不在同一個文件夾下面的時候,要補全文件地址
默認情況下,圖片在文檔中是左對齊的,如果要對圖片進行居中顯示,在網上找了很多方法都不可行,最后找到一種方法是直接加入以下代碼:
- last_paragraph = document.paragraphs[-1]
- last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER #圖片居中設置
5.添加表格
table = document.add_table(rows=2, cols=3,style="Table Grid") #添加2行3列的表格
表格的style有很多種,默認情況下表格是沒有邊框的,Table Grid格式是普通的黑色邊框表格,更多表格樣式可以百度。但是,我們很多時候希望對表格進行更為漂亮的修改,比如自定義表格某一列的寬度,表格的高度。
- from docx.shared import Inches
- # table.autofit = False
- col = table.columns[1]
- col.width = Inches(5) #設置表格第2列寬度為Inches(5) 默認情況下表格是自動適應文檔寬度
對于表格的高度官網上面有說明文檔,但是其庫函數的代碼沒有更新,所以找了很久才找到下面一種方法,以后官網要是更新了代碼可以按照官網上面的方法進行設置更為簡單一些。
- from docx.oxml.ns import qn
- from docx.oxml import OxmlElement
- for i in range(rows): #遍歷表格的所有行
- tr = table.rows[i]._tr
- trPr = tr.get_or_add_trPr()
- trHeight = OxmlElement('w:trHeight')
- trHeight.set(qn('w:val'), "450")
- trPr.append(trHeight) #表格的每一行進行高度設置,450這個值可以任意修改
6.表格里面添加文字
- heading_cells = table.rows[0].cells #將表格的第一行設置為表頭
- for i in range(cols): #cols為表格的列數
- p = heading_cells[i].paragraphs[0] #利用段落功能添加文字
- run = p.add_run(Arr[i]) #把表頭放在一個數組里面的,這樣方便賦值
- p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER #居中設置,默認是左對齊
還有一種直接對表格賦值的方式:table.cell(i,j).text = u'表格文字' #在表格的i行j列設置文字,默認文字在表格中是左對齊
7.添加表格行
row = table.add_row()
若需要對添加的行進行賦值,其方法和上面是一樣的。
8.文檔的保存
document.save('test.docx') #可以設置其他路徑
整體代碼如下:
- from docx import Document
- from docx.oxml.ns import qn
- from docx.oxml import OxmlElement
- from docx.shared import RGBColor
- from docx.shared import Pt
- from docx.enum.text import WD_ALIGN_PARAGRAPH
- from docx.shared import Inches
- document = Document()
- document.add_heading('This is my title', 0)
- document.add_paragraph('my paragraph')
- document.styles['Normal'].font.name = u'黑體'
- p = document.add_paragraph()
- p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
- run = p.add_run(u'我添加的段落文字 ')
- run.font.color.rgb = RGBColor(54, 95, 145)
- run.font.size = Pt(36)
- pic = document.add_picture('logo1.PNG')
- last_paragraph = document.paragraphs[-1]
- last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER # 圖片居中設置
- rows = 2
- cols = 3
- table = document.add_table(rows=rows, cols=cols,style = "Table Grid") # 添加2行3列的表格
- for i in range(rows):
- tr = table.rows[i]._tr
- trPr = tr.get_or_add_trPr()
- trHeight = OxmlElement('w:trHeight')
- trHeight.set(qn('w:val'), "450")
- trPr.append(trHeight) # 表格高度設置
- # table.autofit = False
- col = table.columns[1]
- col.width = Inches(5)
- arr = [u'序號',u"類型",u"詳細描述"]
- heading_cells = table.rows[0].cells
- for i in range(cols):
- p = heading_cells[i].paragraphs[0]
- run = p.add_run(arr[i])
- run.font.color.rgb = RGBColor(54, 95, 145) # 顏色設置,這里是用RGB顏色
- run.font.size = Pt(12) # 字體大小設置,和word里面的字號相對應
- p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
- table.cell(1, 1).text = u'表格文字'
- table.add_row()
- document.save('test1.docx')
運行結果如下: