Python操作Word

lhrbest發表於2019-01-09

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呼叫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)






About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub( http://blog.itpub.net/26736162 )、部落格園( http://www.cnblogs.com/lhrbest )和個人weixin公眾號( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:

........................................................................................................................

● QQ群號: 230161599 (滿) 、618766405

● weixin群:可加我weixin,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2019-01-01 06:00 ~ 2019-01-31 24:00 在魔都完成

● 最新修改時間:2019-01-01 06:00 ~ 2019-01-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店

小麥苗出版的資料庫類叢書 http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班 http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁 https://lhr.ke.qq.com/

........................................................................................................................

使用 weixin客戶端 掃描下面的二維碼來關注小麥苗的weixin公眾號( xiaomaimiaolhr )及QQ群(DBA寶典)、新增小麥苗weixin, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2375245/,如需轉載,請註明出處,否則將追究法律責任。

相關文章