python調用word接口主要用到的模板為python-docx,基本操作官方文檔有說明。
使用python新建一個word文檔,操作就像文檔里介紹的那樣:
1 from docx import Document 2 from docx.shared import Inches 3 4 document = Document() 5 6 document.add_heading('Document Title', 0) #插入標題 7 8 p = document.add_paragraph('A plain paragraph having some ') #插入段落 9 p.add_run('bold').bold = True 10 p.add_run(' and some ') 11 p.add_run('italic.').italic = True 12 13 document.add_heading('Heading, level 1', level=1) 14 document.add_paragraph('Intense quote', style='IntenseQuote') 15 16 document.add_paragraph( 17 'first item in unordered list', style='ListBullet' 18 ) 19 document.add_paragraph( 20 'first item in ordered list', style='ListNumber' 21 ) 22 23 document.add_picture('monty-truth.png', width=Inches(1.25)) #插入圖片 24 25 table = document.add_table(rows=1, cols=3) #插入表格 26 hdr_cells = table.rows[0].cells 27 hdr_cells[0].text = 'Qty' 28 hdr_cells[1].text = 'Id' 29 hdr_cells[2].text = 'Desc' 30 for item in recordset: 31 row_cells = table.add_row().cells 32 row_cells[0].text = str(item.qty) 33 row_cells[1].text = str(item.id) 34 row_cells[2].text = item.desc 35 36 document.add_page_break() 37 38 document.save('demo.docx') #保存文檔
讀取和編輯一個已有的word文檔,只需在一開始添加上文件路徑就行了,如下:
1 from docx import Document 2 from docx.shared import Inches 3 4 document = Document('demo.docx') #打開文件demo.docx 5 for paragraph in document.paragraphs: 6 print(paragraph.text) #打印各段落內容文本 7 8 document.add_paragraph( 9 'Add new paragraph', style='ListNumber' 10 ) #添加新段落 11 12 document.save('demo.docx') #保存文檔
如果是想讀取其中的圖片或是更復雜地編輯,首先我們需要先來認識下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文件內容:
media目錄下存放word文檔中插入的圖片:
所以,我們可以使用手工的方法編輯文件document.xml來對該word文檔內容進行編輯,或是提取文檔media中圖片文件的方式來提取該word文檔中所插入的所有圖片。
1 import zipfile 2 3 f=zipfile.ZipFile('demo.docx','r') 4 5 for filename in f.namelist(): 6 f.extract(filename)