0
0

PythonでWordの表に画像を挿入または抽出する

Posted at

表中の画像は、データを視覚的に表現する方法です。Wordの表に関連する画像を含めることで、情報に説得力を持たせ、理解しやすくすることができます。しかし、再利用や編集のために、Wordの表に埋め込まれた画像を抽出する必要がある場合もあります。
この記事では、Spire.Doc for Pythonライブラリを使用して、PythonでWordの表に画像を挿入したり、Wordの表から画像を抽出したりする方法を紹介します。

Wordの表を扱うためのPythonライブラリ

Spire.Doc for PythonはWord文書を作成・処理するための使いやすいライブラリです。これを使うと、Word文書に表を作成したり、表にデータを記入したり、画像を挿入したりすることができます。

Python Wordライブラリをインストールするには、以下のpipコマンドを実行します。
pip install Spire.Doc

Python Wordの表に画像を挿入する

コードサンプル:

from spire.doc import *
from spire.doc.common import *

inputFile = "Table.docx"
outputFile = "AddImageToTable.docx"

# Word文書を読み込む
doc = Document()
doc.LoadFromFile(inputFile)

# ドキュメントの最初のセクションから最初の表を取得する
table = doc.Sections[0].Tables[0]

# 表の2行目の3番目のセルに画像を追加する。
cell = table.Rows[1].Cells[2]
picture = cell.Paragraphs[0].AppendPicture("pic1.jpg")
# 画像の幅と高さを設定する
picture.Width = 100
picture.Height = 100

# 表の3行目の3番目のセルに画像を追加する。
cell = table.Rows[2].Cells[2]
picture = cell.Paragraphs[0].AppendPicture("pic2.jpg")
# 画像の幅と高さを設定する
picture.Width = 100
picture.Height = 100

# 表の4行目の3番目のセルに画像を追加する。
cell = table.Rows[3].Cells[2]
picture = cell.Paragraphs[0].AppendPicture("pic3.jpg")
# 画像の幅と高さを設定する
picture.Width = 100
picture.Height = 100

# 結果文書を保存する
doc.SaveToFile(outputFile, FileFormat.Docx)
doc.Close()

上記のコードでは、まず Table.Row[int].Cells[int] プロパティを使って特定のセルにアクセスし、TableCell.Paragraphs[int].AppendPicture() メソッドを使って画像を追加します。Pythonライブラリには、画像の幅と高さを設定するAPIも用意されています。

Python Wordの表から画像を抽出する

コードサンプル:

from spire.doc import *
from spire.doc.common import *

inputFile = "AddImageToTable.docx"

# Word文書を読み込む
doc = Document()
doc.LoadFromFile(inputFile)

# ドキュメントの最初のセクションから最初の表を取得する
table = doc.Sections[0].Tables[0]

# 画像名の初期化
image_name = None

# 画像リストの作成
images = []

# テーブルのすべての行を反復処理する
for i in range(table.Rows.Count):

    # 各行のすべてのセルを反復処理する
        for j in range(table.Rows[i].Cells.Count):
            
            # 各セル内のすべての段落を繰り返し処理する
            for p in range(table.Rows[i].Cells[j].Paragraphs.Count):
                 # 指定した段落を取得する
                 para = table.Rows[i].Cells[j].Paragraphs.get_Item(p)
                 
                 # 各段落のすべての子オブジェクトを反復処理する                 for x in range(para.ChildObjects.Count):       
                      # 指定した子オブジェクトを取得する
                       obj = para.ChildObjects.get_Item(x)
                       
                       # 子オブジェクトがDocPicture型かどうかを判断する
                       if obj.DocumentObjectType == DocumentObjectType.Picture:
                            picture = obj if isinstance(obj, DocPicture) else None
                            
                            # 画像データをリストに追加する
                            dataBytes = picture.ImageBytes
                            images.append(dataBytes)
                            
                            # リスト内の画像を繰り返し処理し、それぞれを指定したファイルパスに保存する
                            for index, item in enumerate(images):
                                 image_Name = "TableImages/Image-{}.png".format(index)
                                 with open(image_Name, 'wb') as imageFile:
                                      imageFile.write(item)
# ドキュメントを閉じる
doc.Close()

表から画像を抽出するには、表のセル内の段落の各子オブジェクトが DocPicture タイプかどうかを判断する必要があります。もしそうであれば、画像をリストに追加し、それぞれを指定されたファイル・パスに保存することができます。

Python Wordライブラリの無料ライセンスを取得する

Python Word ライブラリを試してみたい、Word 文書処理機能をもっと知りたいという方は、無料ライセンスをリクエストしてください。

0
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
0
0