Python-docx是專門針對于word文檔的一個模塊,只能操作docx 不能讀取doc文件。在這里python-docx主要的功能是對docx文件進行操作,管理等。
官方文檔:https://python-docx.readthedocs.io/en/latest/index.html
pip install python-docx
導入Document模塊
從 docx模塊中,導入Document類,并實例化生成一個Document對象,通過它對word文檔進行操作。
from docx import Document
Doc = Document()
添加標題
Doc.add_heading("使用Python操作word文檔")
Doc.add_heading("添加標題2",level=2)
Doc.add_heading("添加標題3",level=3)
添加段落(paragraph)
這里paragraph指的就是一個段落的意思
Doc.add_paragraph("Python是一種面向對象的編程語言")
Doc.add_paragraph("Python可以操作word文檔")
Doc.add_paragraph("看看操作的結果吧")
插入圖片
doc.add_picture('./images/img1.jpg', width=Inches(5),height=Inches(3))
插入表格
# 插入表格
table = doc.add_table(rows=1, cols=3) # 插入表格
table.style ='Table Grid'
#設置列寬
table.cell(0,0).width=Cm(20)
table.cell(0,1).width=Cm(15)
table.cell(0,2).width=Cm(15)
#設置整個表格字體屬性
table.style.font.size=Pt(10)
table.style.font.color.rgb=RGBColor(255, 0, 0)
table.style.paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER
hdr_cells = table.rows[0].cells
#hdr_cells[0].text = '名稱'
hdr_cells[1].text = '品牌'
hdr_cells[2].text = '價格'
#單個單元格設置
cell=table.cell(0,0)
p=cell.paragraphs[0]
run = p.add_run("名稱")
run.font.color.rgb = RGBColor(0, 0, 255) # 顏色設置,這里是用RGB顏色
run.font.size = Pt(12) # 字體大小設置,和word里面的字號相對應
#設置水平對齊方式(LEFT,RIGHT,CENTER)
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
#設置垂直對齊方式(TOP,BOTTOM,CENTER)
cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
ls = [
["秋梨潤肺膏", "同仁堂", "32.00"],
["夏桑菊顆粒", "白云山", "19.90"],
["急支糖漿", "太極", "26.80"],
["蟲草清肺膠囊", "同濟堂", "88.00"],
["布洛芬緩釋膠囊", "芬必得", "30.20"],
["小兒氨酚烷胺顆粒", "葵花藥業", "15.20"]
]
for item in ls:
row_cells = table.add_row().cells
row_cells[0].text = item[0]
row_cells[1].text = item[1]
row_cells[2].text = item[2]
邊框樣式
table_style = 'Normal Table' #無線框表格
單元格對齊
在對單元格對齊方式設置的時候,將單元格視為一個整體,要使用單元格中的垂直對齊(cell.vertical_alignment)和單元格中的段落的對齊(paragraph.alignment)等2種對齊方式配合使用。
在docx.enum.table.WD_ALIGN_VERTICAL定義了TOP、CENTER和BOTTOM等3種類型,含義如下:
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT
WD_CELL_VERTICAL_ALIGNMENT.TOP:單元格內容靠上對齊
WD_CELL_VERTICAL_ALIGNMENT.CENTER:單元格內容居中對齊
WD_CELL_VERTICAL_ALIGNMENT.BOTTOM:單元格內容靠下對齊
在WD_PARAGRAPH_ALIGNMENT中定義了4中類型,分別是LEFT、CENTER、RIGHT和JUSTIFY等4中類型,含義如下:
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 導入段落對齊
WD_PARAGRAPH_ALIGNMENT.LEFT:段落左對齊
WD_PARAGRAPH_ALIGNMENT.CENTER:段落居中對齊
WD_PARAGRAPH_ALIGNMENT.RIGHT:段落右對齊
WD_PARAGRAPH_ALIGNMENT.JUSTIFY:段落兩端對齊
合并單元格
cell_1=table.cell(1, 0)
cell_2=table.cell(2, 1)
cell_1.merge(cell_2)
保存word文檔
Doc.save("Python_word.docx")
from docx import Document
doc = Document('./data/Python_word.docx')
#輸出每一段的內容
for para in doc.paragraphs:
print(para.text)
說明:
doc.paragraphs:獲取段落對象列表
如果是想讀取其中的圖片或是更復雜地編輯,首先需要先來認識下docx文檔的格式組成:
docx是Microsoft Office2007之后版本使用的,用新的基于XML的壓縮文件格式取代了其專有的默認文件格式,在傳統的文件名擴展名后面添加了字母“x”(即“.docx”取代“.doc”、“.xlsx”取代“.xls”、“.pptx”取代“.ppt”)。
docx格式的文件本質上是一個ZIP文件。將一個docx文件的后綴改為ZIP后是可以用解壓工具打開或是解壓的。事實上,Word2007的基本文件就是ZIP格式的,他可以算作是docx文件的容器。
docx 格式文件的主要內容是保存為XML格式的,但文件并非直接保存于磁盤。它是保存在一個ZIP文件中,然后取擴展名為docx。將.docx 格式的文件后綴改為ZIP后解壓, 可以看到解壓出來的文件夾中有word這樣一個文件夾,它包含了Word文檔的大部分內容。而其中的document.xml文件則包含了文檔的主要文本內容。
word目錄下:
document.xml文件內容:
所以,我們可以使用手工的方法編輯文件document.xml來對該word文檔內容進行編輯,或是提取文檔media中圖片文件的方式來提取該word文檔中所插入的所有圖片。
import zipfile
f=zipfile.ZipFile('./data/Python_word.docx','r')
for filename in f.namelist():
print(filename)
f.extract(filename)