Как читать содержимое таблицы в файле 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))