Извлечение заголовка таблицы из Word (.docx) с использованием Python

У меня есть документ Word (.docx) с заголовками и соответствующими таблицами под заголовками, как показано ниже:

1.1.1.1 Table_Title_001

Name        Gautham

College     Oxford

University  Cambridge

1.1.1.2 Table_Title_002

Name        Krishnan

College     Harvard

University  Stanford

Есть ли способ извлечь заголовок каждой таблицы с помощью Python? Документация для win32com или python-docx не очень ясна по этому поводу.


person gautham    schedule 11.04.2016    source источник
comment
Установлен ли Word на машине, на которой работает программа? Или вы ищете решение, которое могло бы работать, например, на сервере Linux?   -  person Doc Brown    schedule 11.04.2016
comment
@Doc Brown Word установлен на моем компьютере. Я ожидаю некоторой помощи в извлечении заголовка таблицы с использованием любых внешних модулей Python, таких как API win32com.client или Python-docx. Заранее спасибо.   -  person gautham    schedule 11.04.2016
comment
Тогда ваша общая стратегия должна быть следующей: google о том, как делать то, что вы хотите, в VBA. Перенесите решение на Python с помощью win32com (см. документы .activestate.com / activepython / 2.4 / pywin32 / html / com / win32com /). Обратите внимание: COM API Word и API VBA почти идентичны.   -  person Doc Brown    schedule 11.04.2016
comment
Спасибо, @Doc Brown, я сделал то же самое, и теперь это вроде работает. Экспериментируйте с разными API Win32com, и, как вы сказали, они очень идентичны API VBA.   -  person gautham    schedule 12.04.2016


Ответы (2)


У меня сейчас нет Windows, поэтому я не могу протестировать его локально, но в таблицах Word есть Свойство Title, которое, похоже, именно то, что вы ищете.

Используя win32com, это будет выглядеть примерно так:

from win32com import client
word = client.Dispatch("Word.Application")
document = word.Documents.Open(path_to_docx)

titles = [table.Title for table in document.Tables]
person magni-    schedule 11.04.2016
comment
Этот ответ не очень полезен, если в нем не указано, какая технология или модуль используется для доступа к словесному документу. Используется ли автоматизация COM (для которой требуется установка Word)? Или python-docx? Или что-то совсем другое? - person Doc Brown; 11.04.2016
comment
Я хотя OP использовал win32com, но вы правы, я отредактирую свой ответ, чтобы добавить ясности. - person magni-; 11.04.2016
comment
Свойство Word Table.Title было бесполезным (я не мог понять его даже после прочтения, но я использовал ListParagraphs с клиентом win32com, чтобы добиться того же! Тем не менее, благодарю за вашу помощь @ magni- - person gautham; 12.04.2016
comment
Ах, это были заголовки абзацев, а не заголовки таблиц? - person magni-; 12.04.2016
comment
Да, если эти заголовки пронумерованы как 1.1.1, 1.1.2, они на самом деле являются ListParagraphs! - person gautham; 12.04.2016
comment
И ListParagraphs не учитывает заголовки с одинаковыми номерами, если они также присутствуют в Оглавлении, а это именно то, что я хотел :) - person gautham; 12.04.2016

Используя python-docx, они очень легко читаются. В python-docx это не заголовки, а абзацы. Для начала я бы порекомендовал заглянуть на этот сайт, чтобы вы поняли, как он работает.

from docx import Document
doc = Document("wordfile.docx")
for para in doc.paragraphs:
     print(para.text)

Это распечатает каждый абзац в текущем документе. Если в вашем файле есть только заголовки и таблицы, это подойдет вам.

person Mark Cuddihy    schedule 26.04.2016