【Python】Excelのセル内のテキストを置換する
PythonでExcelファイルのセル内の文字列を置換します。 テンプレートとなるようなファイルがあり、その中の文字列だ …
Pythonを使ってExcelファイルの図形内にあるテキストを置換します。
また、図形の中のテキストを読み取ったり、図形の中にテキストを書き込んだりする例にもなっています。
まず最初に実行前と実行後のExcelファイルのスクリーンショットを載せます。
図形内のテキストが変化しているのを確認してください。
ちなみに、図形内ではなくセル内のテキストを置換する例は以下のページで解説しています。
次のコマンドを実行してwin32comをインストールしてください。
pip install pywin32
次のようなフォルダ構成を想定しています。
/
├ template.xlsx ← 対象のエクセルファイル
└ main.py ← Pythonスクリプト
以下がPythonのスクリプトとなります。
ハイライトされている部分でテキストの置換を行っています。
import win32com.client
from pywintypes import com_error
from pathlib import Path
# 検索する文字列: 置換する文字列
REPLACE_TXTS = {
'{{テキスト1}}': 'こんにちは。',
'{{テキスト2}}': 'おはようございます。'
}
nowdir = Path(__file__).absolute().parent
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = False
try:
# xlsxファイルを開く
wb = excel.Workbooks.Add(str(nowdir / 'template.xlsx'))
sheet = wb.WorkSheets(1)
sheet.Activate()
# 図形内のテキストを置換
for shape in sheet.shapes:
src_text = shape.TextFrame.Characters().Text
for search_txt, replace_txt in REPLACE_TXTS.items():
src_text = src_text.replace(search_txt, replace_txt)
shape.TextFrame.Characters().Text = src_text
# 別名で保存
wb.SaveAs(str(nowdir / 'new.xlsx'))
except com_error as e:
print('失敗。', e)
else:
print('成功。')
finally:
wb.Close(False)
excel.Quit()
下記が処理の流れです。
置換する文字列を定義しておく
まずは置換前と置換後の文字列を定義しておきます。後の置換処理で使用します。
xlsxファイルを開く
エクセルファイルを開いてシートを選択(Activate
)します。
Workbooks.Add
しているのでファイルを開くというよりは、そのファイルをコピーして作業中のブックとして使用する感じです。
置換処理を行う
sheet.shapes
でシート内の図形をすべて取得し、それらをループ処理していきます。
図形の中のテキストをshape.TextFrame.Characters().Text
で取得し、そのテキストに対して置換処理を行います。
置換処理後のテキストを図形のテキストに代入します。
xlsxファイルを保存する
元のファイルが置き換わるのが嫌なので、別名でファイルを保存します。
以下VBAのリファレンスですが参考までに。
PythonでExcelファイルのセル内の文字列を置換します。 テンプレートとなるようなファイルがあり、その中の文字列だ …
Pythonを使ってExcelシートをPDFに変換する方法を書きます。 PythonでExcelファイルをいじるライブラ …
PowerShellでパスワード付きのエクセルブックを開きます。 エクセルブックを開くメソッド(Openメソッド)を実行 …
PowerShellを使ってExcelのセル内の文字列を置換します。 Excelの検索・置換機能をPowerShellか …
Windows10にPythonをインストールします。 公式サイトからインストーラーをダウンロードし、それを自分のPCで …
Python & Seleniumで作成したプログラムを実行形式(.exe)にします。 特に今回は一つのexeフ …
Pythonを使ってiPhone/iPadだけでyoutubeなどの動画をダウンロードするスクリプトを作成しました。 そ …