Как читать содержимое таблицы в файле MS-Word с помощью Python?

Как я могу читать и обрабатывать содержимое каждой ячейки таблицы в файле DOCX?

Я использую Python 3.2 В Windows 7 и PyWin32 для доступа к документу MS-Word.

Я новичок, поэтому я не знаю, как правильно добраться до ячеек таблицы. До сих пор я только что сделал это:

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

3 ответов


вот что работает для меня в 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

затем вы можете выбрать нужную таблицу по ее индексу. Обратите внимание, что, в отличие от python, индексирование COM начинается с 1:

table = doc.Tables(1)

чтобы выбрать ячейку:

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

чтобы получить его содержание:

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

надеюсь, что это помогает.

EDIT:

пример функции, возвращающей столбец индекс на основе его заголовка:

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

Прыжки в довольно поздно в жизни, но думал, что я все равно потушу это: Теперь (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

Я нашел простой фрагмент кода на блог Чтение Содержимого Таблицы С Помощью Python by Этьен

самое замечательное в этом то, что вам не нужны никакие нестандартные библиотеки python.

формат файла docx описан в открыть 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))