web-dev-qa-db-ja.com

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")
14
Aashiq Hussain

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

これがお役に立てば幸いです。

編集:

見出しに基づいて列インデックスを返す関数の例:

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
19
YusuMishi

人生の後半に飛び込んできましたが、とにかくこれを出そうと思ったのですが、今(2015年)、かなりきちんとしたドキュメントを使用できます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
22
peterb

私はブログで簡単なコードスニペットを見つけました 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))
7
Mike Robins