PythonでExcel文字列の一部に色をつける


はじめに

タイトルの通りですが、Pythonを使用してExcelファイルを読み込み、セル内に書き込まれている文字列の一部に色をつけて出力します。
当初はopenpyxlで行おうと思っていましたが、どうも目的の動きはできなそうだったのでxlsxwriterのwrite_rich_stringを使用して実現することにしました。
ですが、xlsxwriterは読み込みができないので、読み込み部分はopenpyxl、書き込み部分はxlsxwriterで行おうと思います。
Pythonを選んだのは、自分があまり触ったことがないからです。

やること

1.PythonでExcelを読み込み

openpyxl
import openpyxl

# openpyxlでファイルを開く
iptbook = openpyxl.load_workbook(filename='test.xlsx')
# シート選択
iptsheet = iptbook.worksheets[0]
# セルの文字列を取得
cellvalue = iptsheet.cell(row=1, column=1).value
# 終了
iptbook.close()

2.セル内の文字列の一部に色をつけて出力

xlsxwriter
import xlsxwriter

# xlsxwriterでブックを作成
optbook = xlsxwriter.Workbook('opt.xlsx')
# xlsxwriterでシートを追加
optsheet = optbook.add_worksheet()
# 書式を定義
red = optbook.add_format({'color': 'red'})
# 文字を分割
splitvalue = cellvalue.split()
# リッチテキストで書き込み
optsheet.write_rich_string('A1', red, splitvalue[0], splitvalue[1])
# 終了
optbook.close()

結果

実行前と後のファイルになります。

参考にさせていただいた記事

Example: Writing “Rich” strings with multiple formats

Excelで1セル内に複数の書式(フォント)が混在するようなものをPythonで扱いたい

おわりに

リッチテキストであれば、色に限らず線の太さやフォントも変えることができます。
今回は2つのライブラリを組み合わせて使用することで実現ができました。
よりよい方法をご存じの方がいましたら教えてくださると嬉しいです。