文書処理の効率化は、現代のオフィス業務における重要な競争力となっています。膨大な数のWord文書において、繰り返し発生する煩雑なテキスト修正作業に対し、手動操作では時間と労力を要するだけでなく、人的ミスによるデータの不整合を招く可能性もあります。Pythonは、その強力な自動化処理能力を活用することで、文書をバッチ処理で効率的に変換する新たな解決策を提供します。簡潔なPythonプログラムを作成することで、文書の内容を正確に特定し、複数条件に基づいたテキストのインテリジェントな置換を実現し、文書処理の一貫性と正確性を保証できます。本記事では、Pythonを使用してWord文書内のテキストを検索および置換する方法を紹介します。
ここで紹介する方法では、無料で利用できるFree Spire.Doc for Pythonを使用します。PyPIから以下のコマンドでインストールできます:pip install spire.doc.free
。
PythonでWord文書のテキストを検索・置換する
Word文書をDocument
インスタンスに読み込み、Document.Replace()
メソッドを使用することで、指定されたテキストを新しいテキストに置換できます。文書内のすべての一致箇所を置換する方法のほか、最初の一致箇所のみを置換することも可能です。その場合は、置換を実行する前にDocument.ReplaceFirst
プロパティをTrue
に設定します。以下に操作手順を示します。
操作手順
- 必要なモジュールをインポートします(
Document
)。 -
Document
インスタンスを作成し、Document.LoadFromFile()
メソッドを使用してWord文書をファイルから読み込みます。 - 最初の一致箇所のみを置換する場合は、
Document.ReplaceFirst
プロパティをTrue
に設定します。 -
Document.Replace()
メソッドを使用して、指定されたテキストを新しいテキストに置換します。 -
Document.SaveToFile()
メソッドを使用して文書を保存します。
コード例
from spire.doc import Document
import re
# Documentインスタンスを作成しファイルを読み込む
doc = Document()
doc.load_from_file("example.docx")
# 正規表現を使用してテキストを置換
pattern = re.compile(r"(\d{4})年")
doc.replace(pattern, r"\1年(西暦)")
# ファイルを保存
doc.save_to_file("updated_example.docx")
正規表現を使用してWord文書のテキストを置換する
明確なテキストを直接指定して置換するだけでなく、Document.Replace()
メソッドは正規表現を使用した検索および置換にも対応しています。これにより、より柔軟なテキスト操作が可能になります。
操作手順
- 必要なモジュールをインポートします(
Document
、Regex
)。 -
Document
インスタンスを作成し、Document.LoadFromFile()
メソッドを使用してWord文書をファイルから読み込みます。 - 正規表現を使用して
Regex
オブジェクトを作成します。 -
Document.Replace()
メソッドを使用して、正規表現に一致するテキストを新しいテキストに置換します。 -
Document.SaveToFile()
メソッドを使用して文書を保存します。
コード例
from spire.doc import Document, Regex
# Document オブジェクトを作成
document = Document()
# Word 文書を読み込む
document.LoadFromFile("Sample1.docx")
# #で始まるテキストを一致させる正規表現を作成
regex = Regex(r"ORD-\d{8}")
# 正規表現に一致するテキストを検索し、別のテキストに置き換える
document.Replace(regex, "ORD-[注文ID]")
# 文書を保存
document.SaveToFile("output/正規表現検索置換.docx")
document.Close()
Word文書のテキストを検索して画像に置換する
Document.FindAllString()
メソッドを使用してWord文書内の指定されたテキストを検索し、そのテキストを削除して対応する位置に画像を挿入することが可能です。以下に操作手順を示します。
操作手順
- 必要なモジュールをインポートします(
Document
、DocPicture
)。 -
Document
インスタンスを作成し、Document.LoadFromFile()
メソッドを使用してWord文書をファイルから読み込みます。 -
Document.FindAllString()
を使用して指定されたテキストを検索し、一致箇所のコレクションを取得します。 - コレクション内の各テキストを以下の手順で処理します:
-
DocPicture
オブジェクトを作成し、DocPicture.LoadImage()
メソッドを使用して画像ファイルを読み込みます。 -
TextSelection.GetAsOneRange()
メソッドで一致したテキストを範囲として取得します。 -
TextRange.OwnerParagraph.ChildObjects.IndexOf()
メソッドで、該当段落内のテキストのインデックスを取得します。 -
TextRange.OwnerParagraph.ChildObjects.Insert()
メソッドで画像を挿入します。 -
TextRange.OwnerParagraph.ChildObjects.Remove()
メソッドでテキストを削除します。
-
-
Document.SaveToFile()
メソッドを使用して文書を保存します。
コード例
from spire.doc import Document, DocPicture
# Document オブジェクトを作成
document = Document()
# Word 文書を読み込む
document.LoadFromFile("Sample2.docx")
# 文書内で特定のテキストを検索
selections = document.FindAllString("パソコン画像", True, True)
index = 0
textRange = None
# 検索結果を繰り返し処理
for selection in selections:
# 画像を読み込む
pic = DocPicture(document)
pic.LoadImage("Laptop.jpg")
# 見つかったテキストを単一のテキスト範囲として取得
textRange = selection.GetAsOneRange()
# テキスト範囲が所属する段落内でのインデックスを取得
index = textRange.OwnerParagraph.ChildObjects.IndexOf(textRange)
# インデックス位置に画像を挿入
textRange.OwnerParagraph.ChildObjects.Insert(index, pic)
# テキスト範囲を削除
textRange.OwnerParagraph.ChildObjects.Remove(textRange)
# 処理済みの文書を保存
document.SaveToFile("output/テキストを画像に置換.docx")
document.Close()
本記事では、Pythonを使用してWord文書内のテキストを検索および置換する方法について、直接置換、正規表現を使用した置換、さらにテキストを画像に置換する方法を紹介しました。