如何使用Python读取MS-Word文件中的表的内容?

Aas*_*ain 13 python ms-word

如何读取和处理DOCX文件中表格的每个单元格的内容?

我在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")
Run Code Online (Sandbox Code Playgroud)

pet*_*erb 24

在相当晚的时候跳进去,但我认为无论如何我都会这样做:现在(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
Run Code Online (Sandbox Code Playgroud)

  • 该库不处理连续的合并单元格 (2认同)

Yus*_*shi 20

以下是Python 2.7中适合我的内容:

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

要查看文档有多少个表:

doc.Tables.Count
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过索引选择所需的表.请注意,与python不同,COM索引从1开始:

table = doc.Tables(1)
Run Code Online (Sandbox Code Playgroud)

要选择一个单元格:

table.Cell(Row = 1, Column= 1)
Run Code Online (Sandbox Code Playgroud)

获取其内容:

table.Cell(Row =1, Column =1).Range.Text
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助.

编辑:

一个函数示例,该函数根据其标题返回Column索引:

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
Run Code Online (Sandbox Code Playgroud)

那么你可以通过这种方式访问​​你想要的单元格:

table.Cell(Row =1, Column = Column_index("The Column Header") ).Range.Text
Run Code Online (Sandbox Code Playgroud)


Mik*_*ins 7

我在博客上找到了一个简单的代码片段.阅读表内容使用Python by etienne

最棒的是你不需要安装任何非标准的python库.

Open Office XML中描述了docx文件的格式.

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))
Run Code Online (Sandbox Code Playgroud)