LoginSignup
1
0

PythonでWord(.docx)のネストされた表を取得する

Posted at

まとめ

Word内の表の中の表(ネストされた表)はpython-docxで中身を取得できる

背景

以前、職場で行われた実験をデータベース化したときのことです。
いろいろ壁はあったのですが、その中で最も扱いに苦労したものに実験条件の抽出があります。
どういうことかというと、各実験での実験計画書がwordで書かれており、使用する材料は表の中の表、すなわちネストされた表として記載されてました。
↓のような感じ
image.png

Wordの表を扱うのすら面倒なのに、その中にネストされた表を抽出するのはめちゃくちゃ怠かったです。
当時はいろいろ試した記憶がありますが、この方法に落ち着きました。

方法

code1
import docx

def get_nested_table(doc):#ネストされた表を取り出すジェネレータ関数
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                yield from cell.tables
    yield None

doc=docx.Document('ワードファイルのパス')
nest=next(get_nested_table(doc))


for i in range(3): #確認用
    for j in range(3):
        print(nest.cell(i,j).text)

親表の中の一つ一つのセルをみて、表がないかどうか確認しています。
ジェネレータ関数にすることで表が2つ以上ある場合にも対処を考えられる余地を持たせてます。
ただし、関数を呼び出すときにnextを忘れるとジェネレータ自体を呼び出してしまいますので注意。

結果
No.
主原料
副原料
1
AA001
AD1
2
AA002
AD1

ということでネスト表の中身を抽出することができました。実際には、表が2つある場合とか、別途工夫が必要になることもあるでしょう。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0