Pythonを使ってExcelファイルを操作したいと考えたとき、openpyxlは非常に強力なライブラリです。この記事では、openpyxlの心臓部とも言えるWorkbookオブジェクトの基本的な使い方に焦点を当てます。
「新しいExcelファイルを作りたい」「既存のファイルを開いて編集したい」「シートを追加したり名前を変えたりしたい」
この記事を読めば、そんなあなたの悩みが解決します。サンプルコードを交えながら、Workbookの新規作成、読み込み、保存、そしてシート操作までを分かりやすく解説していきます。
はじめに:openpyxlとWorkbookとは?
まず、openpyxlとWorkbookが何であるかを簡単に理解しておきましょう。
openpyxlでできること
openpyxlは、PythonでExcelファイル(.xlsx形式)を読み書きするためのライブラリです。 これを使えば、Excelがインストールされていない環境でも、プログラムからExcelファイルを生成したり、内容を読み取ってデータ処理を行ったりできます。請求書の自動生成やデータ分析など、活用の幅は非常に広いです。
Workbookオブジェクトの重要性
Workbookオブジェクトは、Excelファイルそのものを表すオブジェクトです。 openpyxlでExcel操作を始めるには、まずこのWorkbookオブジェクトを作成(新規作成または既存ファイルの読み込み)することからすべてが始まります。ファイル全体に対する操作(保存、シートの追加・削除など)は、このWorkbookオブジェクトを通じて行います。
openpyxlのインストール
openpyxlライブラリを使用するには、まずインストールが必要です。pipコマンドを使って簡単にインストールできます。
ターミナルやコマンドプロンプトで以下のコマンドを実行してください。
Bash
pip install openpyxl
この一行で準備は完了です。早速、使い方を見ていきましょう。
Excelワークブックの新規作成と保存
最初に、まっさらなExcelファイルをPythonで作成し、文字を書き込んで保存するまでの流れを解説します。
まっさらなWorkbookオブジェクトを作成する
新しいワークブックを作成するには、Workbook()クラスのインスタンスを生成します。 これだけで、メモリ上に新しいExcelファイルが作られたことになります。
from openpyxl import Workbook
# 新しいワークブックを作成
wb = Workbook()
print(wb)
# <openpyxl.workbook.workbook.Workbook object at ...>Workbook()を実行すると、少なくとも1つのワークシート(デフォルト名は “Sheet”)が自動的に作成されます。
ワークシートを取得してセルに書き込む
作成したワークブック内のシートを操作するには、wb.activeでアクティブなシートを取得します。 activeは、現在選択されているシート(この場合は自動作成された最初のシート)を指します。
取得したシートのセルに値を書き込むには、ws['A1'] = "値"のように、Excelのアドレスを指定します。
# アクティブなワークシートを取得
ws = wb.active
# シートのタイトルを変更
ws.title = "新しいシート"
# A1セルに値を書き込む
ws['A1'] = "こんにちは、openpyxl!"
# B2セルに値を書き込む
ws['B2'] = 12345ワークブックをファイルとして保存する (save)
メモリ上で行った変更を実際の.xlsxファイルとして保存するには、wb.save()メソッドを使用します。 引数に保存したいファイル名を指定してください。
# ワークブックをファイルに保存
file_path = "sample.xlsx"
wb.save(file_path)
print(f"'{file_path}' として保存しました。")このコードを実行すると、sample.xlsxという名前のExcelファイルが作成され、中に「こんにちは、openpyxl!」と「12345」が書き込まれているはずです。
既存のExcelワークブックを読み込む (load_workbook)
次に、すでに存在するExcelファイルを読み込んで、その内容を取得する方法を学びます。
load_workbook() の基本的な使い方
既存のワークブックを読み込むには、load_workbook()関数を使います。 引数に読み込みたいExcelファイルのパスを指定するだけです。
from openpyxl import load_workbook
# 既存のワークブックを読み込む
file_path = "sample.xlsx" # 先ほど作成したファイル
wb = load_workbook(file_path)
print(f"'{file_path}' を読み込みました。")
print(f"シート名: {wb.sheetnames}")
# シート名: ['新しいシート']wb.sheetnamesプロパティを使うと、そのワークブックに含まれるすべてのシート名をリストで取得できます。
読み込んだワークブックのデータを取得する
シート内のデータを読み取るのも簡単です。シートオブジェクトを取得し、セルのアドレスを指定して.valueプロパティにアクセスします。
# '新しいシート'という名前のシートを取得
ws = wb['新しいシート']
# A1セルの値を取得して表示
cell_a1_value = ws['A1'].value
print(f"A1セルの値: {cell_a1_value}")
# A1セルの値: こんにちは、openpyxl!
# B2セルの値を取得して表示
cell_b2_value = ws['B2'].value
print(f"B2セルの値: {cell_b2_value}")
# B2セルの値: 12345このように、load_workbook()でファイルを開き、シートとセルを指定すれば簡単にデータを読み取れます。
【応用】Workbook内のシートを自在に操る
最後に、ワークブック内のワークシートを操作する様々な方法を紹介します。
アクティブなシートを取得する (active)
前述の通り、wb.activeで現在アクティブな(開いている)シートを取得できます。
# 読み込んだワークブックのアクティブなシートを取得
active_ws = wb.active
print(f"アクティブなシート名: {active_ws.title}")シート名でシートを取得する
wb['シート名']のように、辞書型のようにシート名を指定して、特定のシートオブジェクトを取得できます。
ws = wb['新しいシート']
print(f"取得したシート名: {ws.title}")新しいシートを作成する (create_sheet)
新しいシートを追加するには、wb.create_sheet()メソッドを使います。
# 新しいシートを作成(デフォルトでは末尾に追加される)
ws_new = wb.create_sheet(title="追加シート")
# 2番目に新しいシートを作成
ws_index = wb.create_sheet(title="インデックス指定シート", index=1)
print(f"現在のシート一覧: {wb.sheetnames}")
# 現在のシート一覧: ['新しいシート', 'インデックス指定シート', '追加シート']title引数でシート名を、index引数でシートを挿入する位置(0から始まる)を指定できます。
シート名を変更する (title)
シートオブジェクトの.titleプロパティに新しい名前を代入するだけで、シート名を変更できます。
ws_to_rename = wb['追加シート']
ws_to_rename.title = "名称変更したシート"
print(f"変更後のシート一覧: {wb.sheetnames}")
# 変更後のシート一覧: ['新しいシート', 'インデックス指定シート', '名称変更したシート']シートを削除する (remove)
シートを削除するには、wb.remove()メソッドを使います。 引数には削除したいシートオブジェクトを指定します。
# 削除したいシートオブジェクトを取得
ws_to_remove = wb['インデックス指定シート']
# シートを削除
wb.remove(ws_to_remove)
print(f"削除後のシート一覧: {wb.sheetnames}")
# 削除後のシート一覧: ['新しいシート', '名称変更したシート']
# 変更を保存するのを忘れずに
wb.save("sample_modified.xlsx")注意: シート操作を行った後は、必ずwb.save()で保存しないと変更がファイルに反映されません。
まとめ:Workbook操作のポイント
今回は、openpyxlライブラリにおけるWorkbookの基本操作を解説しました。最後に重要なポイントをまとめます。
- 新規作成:
Workbook()で新しいワークブックを作成する。 - 読み込み:
load_workbook('ファイル名')で既存のブックを読み込む。 - 保存:
wb.save('ファイル名')で変更をファイルに保存する。 - シート取得:
wb.activeやwb['シート名']で操作したいシートを取得する。 - シート操作:
create_sheet(),remove(),.titleプロパティでシートの追加、削除、名前変更が可能。
これらの基本をマスターすれば、Pythonを使ったExcel業務の自動化への第一歩は完璧です。ぜひ、ご自身の業務や学習に役立ててみてください。


コメント