18

DOCXファイルのテーブルのすべてのセルの内容を読み取って処理するにはどうすればよいですか?

Windows7とPyWin32でPython3.2を使用して、MS-Wordドキュメントにアクセスしています。

私は初心者なので、テーブルセルに到達する適切な方法がわかりません。これまでのところ、これを実行しました。

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

3 に答える 3

39

人生のかなり遅い時期に飛び込みましたが、とにかくこれを出すと思いました:今(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
于 2015-08-06T07:16:26.440 に答える
26

Python2.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
于 2012-04-29T19:54:08.890 に答える
14

ブログで簡単なコードスニペットを見つけました。etienneによるPythonを使用したテーブルの内容の読み取り

これの素晴らしいところは、非標準のPythonライブラリをインストールする必要がないことです。

docxファイルの形式は、OpenOfficeXMLで説明されています

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))
于 2015-11-18T08:43:05.843 に答える