表中の画像は、データを視覚的に表現する方法です。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 文書処理機能をもっと知りたいという方は、無料ライセンスをリクエストしてください。