PythonとopenpyxlでExcel操作:.titleプロパティを完全マスター

openpyxl

はじめに:openpyxlの.titleで迷わないために

Pythonを使ってExcel作業を自動化できるopenpyxlは、データ処理やレポート作成の強力な味方です。ブックを開き、セルに値を書き込むといった基本的な操作には慣れてきたものの、シート名やグラフのタイトルを思うように設定できず、手が止まってしまった経験はありませんか?

その原因は、多くの場合.titleプロパティの扱いにあります。一見シンプルに見えるこのプロパティですが、実は操作する対象によって役割が異なり、初心者が混乱しやすいポイントの一つなのです。

この記事であなたがマスターできること

この記事を最後まで読めば、あなたは以下のスキルを身につけることができます。

  • openpyxlにおける.titleプロパティの2つの役割を明確に理解できる。
  • Excelのシート名を、自由自在に取得・設定・変更できるようになる。
  • Excelのグラフタイトルを、プログラムで動的に設定できるようになる。
  • .titleプロパティ関連のよくあるエラーを回避できるようになる。

さあ、.titleプロパティを完全マスターして、あなたのExcel自動化スキルを次のレベルへと引き上げましょう。

なぜ初心者は.titleプロパティで混乱するのか?

混乱の最大の理由は、同じ.titleという名前のプロパティが、全く異なるオブジェクト(部品)で使われているからです。

ある場面ではシート名を指し、別の場面ではグラフのタイトルを指します。この違いを知らないままコードを書こうとすると、「シート名を変更したいのにグラフのコードを参考にしてしまった」といった食い違いが起こり、エラーの原因となります。

まずは、この2つの顔をしっかり区別するところから始めましょう。

openpyxlにおける.titleプロパティの2つの顔

結論:操作する対象が違う

openpyxl.titleプロパティが登場する主な場面は、**「Worksheet(ワークシート)」「Chart(グラフ)」**の2つです。どちらのオブジェクトの.titleプロパティを操作しているのかを意識することが、マスターへの第一歩です。

ケース1:Worksheetオブジェクトの.title(シート名)

これは、Excelファイルの下部にタブで表示されるシートの名前を指します。 openpyxlでは、特定のワークシートを表すWorksheetオブジェクトがこのプロパティを持っており、シート名の取得や変更に使います。最も基本的で、頻繁に利用する.titleプロパティです。

ケース2:Chartオブジェクトの.title(グラフタイトル)

こちらは、シート上に配置された棒グラフや折れ線グラフなどの最上部に表示される見出しのことです。 openpyxlでは、グラフ全体を表すChartオブジェクト(BarChartLineChartなど)がこのプロパティを持っており、グラフの主題を示す文字列を設定するために使います。

それでは、それぞれの具体的な使い方をコードと共に見ていきましょう。

【基本】シート名を扱うWorksheet.titleプロパティ

シート名の操作は非常に直感的です。対象のワークシートオブジェクトを取得し、その.titleプロパティに文字列を代入したり、逆に値を取得したりします。

既存シートのタイトル(シート名)を取得・変更する

すでに存在するExcelファイルのシート名を変更する例です。load_workbook()でファイルを読み込み、シートを選択して.titleを操作します。

from openpyxl import Workbook, load_workbook

# サンプル用のExcelファイルを準備
wb_sample = Workbook()
ws_sample = wb_sample.active
ws_sample.title = "元のシート名"
wb_sample.save("sample_for_title.xlsx")

# --- ここからが本題 ---

# 既存のExcelファイルを読み込む
wb = load_workbook("sample_for_title.xlsx")

# アクティブなシートを選択
ws = wb.active

# 現在のシート名を取得して表示
current_title = ws.title
print(f"変更前のシート名: {current_title}") # 出力: 変更前のシート名: 元のシート名

# .titleプロパティに新しい名前を代入して変更
ws.title = "新しいシート名に変更"
print(f"変更後のシート名: {ws.title}") # 出力: 変更後のシート名: 新しいシート名に変更

# 変更を保存
wb.save("sample_for_title_updated.xlsx")

sample_for_title_updated.xlsxを開くと、シート名が「新しいシート名に変更」に変わっていることが確認できます。

新しいシートを作成する際にタイトルを指定する

Workbookオブジェクトのcreate_sheet()メソッドを使えば、作成と同時にシート名を指定できます。

from openpyxl import Workbook

# 新しいワークブックを作成
wb = Workbook()

# デフォルトのシート名を変更
ws1 = wb.active
ws1.title = "最初のシート"

# 新しいシートをタイトル付きで作成
ws2 = wb.create_sheet(title="売上データ")

# インデックスを指定して特定の位置にシートを作成することも可能
ws3 = wb.create_sheet(title="顧客リスト", index=1) # 2番目の位置に挿入

# 現在のシート名一覧を確認
print(f"現在のシート名一覧: {wb.sheetnames}")
# 出力: 現在のシート名一覧: ['最初のシート', '顧客リスト', '売上データ']

wb.save("multiple_sheets.xlsx")

コードで確認:シート名の操作実践サンプル

上記の操作を一つのファイルにまとめると、以下のようになります。このコードをコピーして実行するだけで、シート名の基本的な操作をすぐに試すことができます。

from openpyxl import Workbook

# 1. 新規ワークブックとシートを作成
wb = Workbook()
ws = wb.active
print(f"デフォルトのシート名: {ws.title}")

# 2. シート名を変更
ws.title = "2025年度レポート"
print(f"変更後のシート名: {ws.title}")

# 3. 新しいシートをタイトル付きで作成
ws_new = wb.create_sheet(title="集計データ")

# 4. すべてのシート名を確認
print(f"ブック内の全シート名: {wb.sheetnames}")

# 5. 変更をファイルに保存
wb.save("report_workbook.xlsx")
print("report_workbook.xlsx を保存しました。")

【応用】グラフタイトルを扱うChart.titleプロパティ

グラフのタイトル設定は、シート名と比べて少し手順が増えますが、流れを理解すれば難しくありません。グラフという部品を作り、それにタイトルを設定し、シートに貼り付ける、というイメージです。

グラフのタイトル設定は3ステップで考える

  1. Step 1: グラフオブジェクト(例: BarChart)と、元になるデータを用意する。
  2. Step 2: 作成したグラフオブジェクトの.titleプロパティに文字列を設定する。
  3. Step 3: グラフをシートに追加 (add_chart) し、ワークブックを保存 (save) する。

それでは、この3ステップに沿って具体的なコードを見ていきましょう。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

# --- Step 1: グラフオブジェクトと元データを用意する ---

wb = Workbook()
ws = wb.active
ws.title = "売上グラフ"

# グラフの元になるデータをシートに書き込み
rows = [
    ("製品", "売上"),
    ("A", 120),
    ("B", 310),
    ("C", 250),
    ("D", 180),
]
for row in rows:
    ws.append(row)

# グラフオブジェクトを作成 (今回は棒グラフ)
chart = BarChart()

# --- Step 2: chart.titleに文字列を設定する ---

chart.title = "製品別 売上実績(2025年度)"
chart.style = 10 # グラフのスタイル(任意)

# --- Step 3: グラフをシートに追加して保存する ---

# グラフが参照するデータ範囲を指定
data = Reference(ws, min_col=2, min_row=1, max_row=5, max_col=2)
# グラフの項目ラベルの範囲を指定
cats = Reference(ws, min_col=1, min_row=2, max_row=5)

# データをグラフに追加
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)

# シートのD2セルを左上としてグラフを配置
ws.add_chart(chart, "D2")

# ワークブックを保存
wb.save("chart_title_demo.xlsx")
print("chart_title_demo.xlsx を保存しました。")

このコードを実行してchart_title_demo.xlsxを開けば、見事にタイトルが設定された棒グラフが作成されているはずです。

.titleプロパティ利用時の注意点とよくあるエラー

最後に、初心者がつまずきやすいポイントとその対策をまとめます。

注意点1:変更をファイルに反映するにはsave()が必須

ws.title = "変更"chart.title = "設定" などの操作は、あくまでメモリ上のデータを変更しているだけです。これらの変更をExcelファイルとして書き出すには、最後に必ずwb.save("ファイル名.xlsx")を実行するのを忘れないようにしましょう。

注意点2:シートとグラフのオブジェクトを取り違えない

「シート名を変更したいのに、グラフのタイトル設定のコードを調べている」という状況は意外とよくあります。

  • シート名を変更したい → Worksheetオブジェクト(wb.activewb["シート名"]で取得)の.titleを操作する。
  • グラフのタイトルを設定したい → BarChart()などで作成したChartオブジェクトの.titleを操作する。

この区別を常に意識することが重要です。

よくあるエラー:AttributeErrorの原因と対策

AttributeError: 'NoneType' object has no attribute 'title' のようなエラーが出ることがあります。これは、「None(=何もない)ものに対して.titleを設定しようとしていますよ」というエラーです。

主な原因は、titleを設定しようとしている変数(wschart)が正しくオブジェクトを取得できていないことです。例えば、存在しないシート名でシートを取得しようとした場合などが考えられます。変数が期待通りのオブジェクトを保持しているか、print()などで確認する癖をつけるとデバッグが容易になります。

まとめ:2つの.titleプロパティを使い分けてExcel操作を自動化しよう

今回は、openpyxlにおける.titleプロパティの完全マスターを目指し、その2つの顔であるシート名とグラフタイトルの扱い方を解説しました。

  • Worksheet.title: シートの名前を扱うためのプロパティ。取得も変更も直感的。
  • Chart.title: グラフの見出しを扱うためのプロパティ。Chartオブジェクトを作成してから設定する。
  • 操作対象のオブジェクト(WorksheetChartか)を意識することが、混乱を避ける鍵。
  • すべての変更はwb.save()で保存しないとファイルに反映されない。

この2つの.titleプロパティを自在に使い分けることができれば、より動的で分かりやすいExcelレポートを自動で作成できるようになります。ぜひ、この記事のサンプルコードを手元で動かしながら、その挙動を体感してみてください。

コメント

タイトルとURLをコピーしました