2012-04-28 53 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))