2012-04-28 105 views
4

如何讀取和處理DOCX文件中表格的每個單元格的內容?如何閱讀MS-Word文件中表格的內容使用Python?

我在Windows 7和PyWin32上使用Python 3.2來訪問MS-Word文檔。

我是初學者,所以我不知道正確的方法來達到表格單元格。到目前爲止,我只是做了這一點:

import win32com.client as win32 
word = win32.gencache.EnsureDispatch('Word.Application') 
word.Visible = False 
doc = word.Documents.Open("MyDocument") 
+2

請提供更多詳細信息...您到目前爲止嘗試了什麼? – ChristopheD 2012-04-28 19:03:39

+0

@ChristopheD,編輯。希望現在夠了嗎? – 2012-04-29 01:23:29

回答

13

下面是我在Python 2.7是什麼在起作用:

import win32com.client as win32 
word = win32.Dispatch("Word.Application") 
word.Visible = 0 
word.Documents.Open("MyDocument") 
doc = word.ActiveDocument 

要查看你的文件有多少表有:

doc.Tables.Count 

然後,你可以通過索引來選擇你想要的表格。需要注意的是,不同於蟒蛇,COM索引開始於1:

table = doc.Tables(1) 

要選擇一個單元格:

table.Cell(Row = 1, Column= 1) 

要得到它的內容:

table.Cell(Row =1, Column =1).Range.Text 

希望這有助於。

編輯:

基於其航向返回列索引功能的一個例子:

def Column_index(header_text): 
for i in range(1 , table.Columns.Count+1): 
    if table.Cell(Row = 1,Column = i).Range.Text == header_text: 
     return i 

即可進入細胞,你想這種方式,例如:

table.Cell(Row =1, Column = Column_index("The Column Header")).Range.Text 
+0

非常感謝你爲我工作。 我還有一個問題,有沒有辦法通過它的列標題和行號訪問表格單元? 再次感謝:) – 2012-04-30 10:07:28

+0

我認爲Ms Word中的列標題是常規單元格。他們應該是表格的第一行。但是,您可以編寫一個返回列索引的函數。我會編輯我的答案,向你展示一個例子。 – YusuMishi 2012-04-30 17:42:08

+0

非常感謝您的幫助。 它幫助。 – 2012-05-01 09:58:55

13

在生活中相當晚的時候跳了起來,但是我認爲我反正會把它寫出來: 現在(2015),您可以使用漂亮整潔的doc python庫: https://python-docx.readthedocs.org/en/latest/。然後:

from docx import Document 

wordDoc = Document('<path to docx file>') 

for table in wordDoc.tables: 
    for row in table.rows: 
     for cell in row.cells: 
      print cell.text 
5

我發現在博客Reading Table Contents Using Python一個簡單的代碼片段通過etienne

關於這個偉大的事情是,你不需要安裝任何非標準Python庫。

docx文件的格式描述在Open Office XML

import zipfile 
import xml.etree.ElementTree 

WORD_NAMESPACE = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}' 
PARA = WORD_NAMESPACE + 'p' 
TEXT = WORD_NAMESPACE + 't' 
TABLE = WORD_NAMESPACE + 'tbl' 
ROW = WORD_NAMESPACE + 'tr' 
CELL = WORD_NAMESPACE + 'tc' 

with zipfile.ZipFile('<path to docx file>') as docx: 
    tree = xml.etree.ElementTree.XML(docx.read('word/document.xml')) 

for table in tree.iter(TABLE): 
    for row in table.iter(ROW): 
     for cell in row.iter(CELL): 
      print ''.join(node.text for node in cell.iter(TEXT))