有兩種方式:
使用win32com
使用docx
1.使用win32com擴充包
隻對windows平台有效
# coding=utf-8
import win32com
from win32com.client import Dispatch, DispatchEx
word = Dispatch('Word.Application') # 打開word應用程式
# word = DispatchEx('Word.Application') #啟動獨立的程序
word.Visible = 0 # 背景運作,不顯示
word.DisplayAlerts = 0 # 不警告
path = 'G:/WorkSpace/Python/tmp/test.docx' # word檔案路徑
doc = word.Documents.Open(FileName=path, Encoding='gbk')
# content = doc.Range(doc.Content.Start, doc.Content.End)
# content = doc.Range()
print '----------------'
print '段落數: ', doc.Paragraphs.count
# 利用下标周遊段落
for i in range(len(doc.Paragraphs)):
para = doc.Paragraphs[i]
print para.Range.text
print '-------------------------'
# 直接周遊段落
for para in doc.paragraphs:
print para.Range.text
# print para #隻能用于文檔内容全英文的情況
doc.Close() # 關閉word文檔
# word.Quit #關閉word程式
2.使用docx擴充包
優點:不依賴作業系統,跨平台
安裝:
pip install python-docx
代碼:
import docx
def read_docx(file_name):
doc = docx.Document(file_name)
content = '\n'.join([para.text for para in doc.paragraphs])
return content
建立表格
# coding=utf-8
import docx
doc = docx.Document()
table = doc.add_table(rows=1, cols=3, style='Table Grid') #建立帶邊框的表格
hdr_cells = table.rows[0].cells # 擷取第0行所有所有單元格
hdr_cells[0].text = 'Name'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
# 添加三行資料
data_lines = 3
for i in range(data_lines):
cells = table.add_row().cells
cells[0].text = 'Name%s' % i
cells[1].text = 'Id%s' % i
cells[2].text = 'Desc%s' % i
rows = 2
cols = 4
table = doc.add_table(rows=rows, cols=cols)
val = 1
for i in range(rows):
cells = table.rows[i].cells
for j in range(cols):
cells[j].text = str(val * 10)
val += 1
doc.save('tmp.docx')
讀取表格
# coding=utf-8
import docx
doc = docx.Document('tmp.docx')
for table in doc.tables: # 周遊所有表格
print '----table------'
for row in table.rows: # 周遊表格的所有行
# row_str = '\t'.join([cell.text for cell in row.cells]) # 一行資料
# print row_str
for cell in row.cells:
print cell.text, '\t',
python調用word接口主要用到的模闆為python-docx,基本操作官方文檔有說明。
使用python建立一個word文檔,操作就像文檔裡介紹的那樣:
from docx import Document
from docx.shared import Inches
document = Document()
document.add_heading('Document Title', 0) #插入标題
p = document.add_paragraph('A plain paragraph having some ') #插入段落
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')
document.add_paragraph(
'first item in unordered list', style='ListBullet'
)
document.add_paragraph(
'first item in ordered list', style='ListNumber'
)
document.add_picture('monty-truth.png', width=Inches(1.25)) #插入圖檔
table = document.add_table(rows=1, cols=3) #插入表格
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in recordset:
row_cells = table.add_row().cells
row_cells[0].text = str(item.qty)
row_cells[1].text = str(item.id)
row_cells[2].text = item.desc
document.add_page_break()
document.save('demo.docx') #儲存文檔
讀取和編輯一個已有的word文檔,隻需在一開始添加上檔案路徑就行了,如下:
from docx import Document
from docx.shared import Inches
document = Document('demo.docx') #打開檔案demo.docx
for paragraph in document.paragraphs:
print(paragraph.text) #列印各段落内容文本
document.add_paragraph(
'Add new paragraph', style='ListNumber'
) #添加新段落
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文檔中所插入的所有圖檔。
import zipfile
f=zipfile.ZipFile('demo.docx','r')
for filename in f.namelist():
f.extract(filename)