天天看點

python調用word_Python操作Word

有兩種方式:

使用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',

print

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檔案則包含了文檔的主要文本内容。

python調用word_Python操作Word

word目錄下:

python調用word_Python操作Word

document.xml檔案内容:

python調用word_Python操作Word

media目錄下存放word文檔中插入的圖檔:

python調用word_Python操作Word

是以,我們可以使用手工的方法編輯檔案document.xml來對該word文檔内容進行編輯,或是提取文檔media中圖檔檔案的方式來提取該word文檔中所插入的所有圖檔。

import zipfile

f=zipfile.ZipFile('demo.docx','r')

for filename in f.namelist():

f.extract(filename)