【Python】Excelのセル内のテキストを置換する

公開日:  

python excel


PythonでExcelファイルのセル内の文字列を置換します。
テンプレートとなるようなファイルがあり、その中の文字列だけを一部置換して新しいファイルとして出力する、みたいな使い方ができるかと思います。

イメージが湧きやすいように、置換前と置換後のExcelファイルのスクリーンショットを載せておきます。

置換前

置換前

置換後 - セル内のテキストが置換されている

置換後 - セル内のテキストが置換されている

なお、この記事で説明する方法では、Excel自体がインストールされている環境でないと使えませんので注意してください。

環境

  • Windows 10
  • Microsoft Excel 2016
  • Python 3.6.2

必要なモジュールをインストール

次のコマンドを実行して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()

    # セル内のテキストを置換
    rg = sheet.Range(sheet.usedRange.Address)
    for search_txt, replace_Txt in REPLACE_TXTS.items():
        rg.Replace(search_txt, replace_Txt)

    # 別名で保存
    wb.SaveAs(str(nowdir / 'new.xlsx'))

except com_error as e:
    print('失敗。', e)
else:
    print('成功。')
finally:
    wb.Close(False)
    excel.Quit()

処理の流れを簡単に書くと以下のようになります。

  1. 置換する文字列を定義しておく
    まずは、置換したい文字列と、それをどんな文字列に置換するか定義しておきます。後の置換処理で使用します。

  2. xlsxファイルを開く
    エクセルファイルを開いてシートを選択(Activate)します。
    Workbooks.Addしているのでファイルを開くというよりは、そのファイルをコピーして作業中のブックとして使用する感じですね。

  3. 置換処理を行う
    sheet.UsedRange.Addressでシートで使われたセル範囲を取得します。そして、検索する文字列と置換する文字列を指定してReplace関数を実行します(実際にExcel上で置換を実行するイメージですね)。

  4. xlsxファイルを保存する
    元のファイルが置き換わるのが嫌なので、別名でファイルを保存します。

このスクリプトを実行すると、冒頭のスクリーンショットのようにセル内の文字列が置換されます。

参考

参考として今回使った関数のリファレンスへのリンクを置いときます。
VBAのリファレンスですが機能としては同じだと思います。



関連記事