[Python] openpyxlでデータをエクセルファイルに出力する方法
Pythonのライブラリ openpyxl
を使用してデータをExcelファイルに出力するには、まずopenpyxl.Workbook()
で新しいワークブックを作成し、active
プロパティでアクティブなシートを取得します。
次に、シートのセルにデータを代入し、save()メソッド
でファイルを保存します。
例えば、sheet['A1'] = 'データ'
のようにセルに値を設定し、wb.save('ファイル名.xlsx')
で保存します。
- openpyxlを使ったExcelファイルの作成方法
- データの書き込みや編集の手法
- グラフや画像の挿入方法
- セルの書式設定や条件付き書式の活用
- エラー処理の重要性と対策
openpyxlとは
openpyxlは、PythonでExcelファイル(.xlsx形式)を操作するためのライブラリです。
このライブラリを使用することで、Excelファイルの作成、読み込み、編集、保存が簡単に行えます。
特に、データ分析や自動化のニーズが高まる中で、openpyxlは多くの開発者にとって便利なツールとなっています。
セルへのデータ入力や書式設定、数式の挿入、さらにはグラフの作成など、さまざまな機能を提供しており、Excelを使った業務の効率化に寄与します。
Pythonのシンプルな文法と相まって、openpyxlは初心者から上級者まで幅広く利用されています。
Excelファイルの作成
新しいワークブックの作成
新しいExcelファイルを作成するには、まずopenpyxlをインポートし、Workbookクラス
を使用します。
以下のサンプルコードでは、新しいワークブックを作成し、ファイルとして保存する方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
# ワークブックをファイルとして保存
workbook.save("新しいファイル.xlsx")
このコードを実行すると、カレントディレクトリに「新しいファイル.xlsx」という名前のExcelファイルが作成されます。
シートの作成と選択
新しいワークブックにはデフォルトで1つのシートが含まれていますが、追加のシートを作成することもできます。
以下のコードでは、シートを追加し、特定のシートを選択する方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
# 新しいシートを追加
workbook.create_sheet("新しいシート1")
workbook.create_sheet("新しいシート2")
# シートを選択
selected_sheet = workbook["新しいシート1"]
このコードでは、「新しいシート1」と「新しいシート2」を追加し、「新しいシート1」を選択しています。
シート名の変更
作成したシートの名前を変更することも簡単です。
以下のコードでは、シート名を変更する方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
# 新しいシートを追加
sheet = workbook.create_sheet("古いシート名")
# シート名を変更
sheet.title = "新しいシート名"
# ワークブックを保存
workbook.save("シート名変更.xlsx")
このコードを実行すると、「古いシート名」が「新しいシート名」に変更され、ファイルが保存されます。
複数シートの操作
複数のシートを操作する際は、シートのリストを取得し、ループを使って各シートにアクセスすることができます。
以下のコードでは、すべてのシートの名前を表示する方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
# シートを追加
workbook.create_sheet("シート1")
workbook.create_sheet("シート2")
workbook.create_sheet("シート3")
# すべてのシートの名前を表示
for sheet in workbook.sheetnames:
print(sheet)
このコードを実行すると、作成したすべてのシートの名前が表示されます。
データの書き込み
セルにデータを入力する方法
特定のセルにデータを入力するには、シートのセルを指定して値を代入します。
以下のサンプルコードでは、A1セルに「こんにちは」と入力する方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# A1セルにデータを入力
sheet["A1"] = "こんにちは"
# ワークブックを保存
workbook.save("セルにデータ入力.xlsx")
このコードを実行すると、A1セルに「こんにちは」というテキストが入力されたExcelファイルが作成されます。
複数のセルにデータを一括で入力する方法
複数のセルにデータを一括で入力するには、リストやタプルを使用してループ処理を行います。
以下のコードでは、A1からA5セルに連続した数値を入力する方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# A1からA5セルにデータを一括で入力
data = [1, 2, 3, 4, 5]
for index, value in enumerate(data, start=1):
sheet[f"A{index}"] = value
# ワークブックを保存
workbook.save("複数セルにデータ入力.xlsx")
このコードを実行すると、A1からA5セルにそれぞれ1から5の数値が入力されます。
行や列にデータを追加する方法
行や列にデータを追加する場合、appendメソッド
を使用することができます。
以下のコードでは、行を追加する方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# 行にデータを追加
sheet.append(["名前", "年齢"])
sheet.append(["田中", 30])
sheet.append(["鈴木", 25])
# ワークブックを保存
workbook.save("行にデータ追加.xlsx")
このコードを実行すると、1行目に「名前」と「年齢」、2行目以降にデータが追加されます。
数式をセルに入力する方法
Excelでは数式をセルに入力することも可能です。
以下のコードでは、A1セルとA2セルの合計をA3セルに入力する方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# A1セルとA2セルにデータを入力
sheet["A1"] = 10
sheet["A2"] = 20
# A3セルに数式を入力
sheet["A3"] = "=A1 + A2"
# ワークブックを保存
workbook.save("数式をセルに入力.xlsx")
このコードを実行すると、A3セルにA1セルとA2セルの合計が計算される数式が入力されます。
セルの書式設定
セルの書式設定を行うことで、データの表示形式を変更できます。
以下のコードでは、A1セルのフォントを太字にし、A2セルの背景色を変更する方法を示します。
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# A1セルにデータを入力し、フォントを太字に設定
sheet["A1"] = "太字のテキスト"
sheet["A1"].font = Font(bold=True)
# A2セルにデータを入力し、背景色を変更
sheet["A2"] = "背景色変更"
sheet["A2"].fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
# ワークブックを保存
workbook.save("セルの書式設定.xlsx")
このコードを実行すると、A1セルのテキストが太字になり、A2セルの背景色が黄色に設定されたExcelファイルが作成されます。
Excelファイルの保存
ファイルの保存方法
Excelファイルを保存するには、saveメソッド
を使用します。
以下のサンプルコードでは、新しいワークブックを作成し、ファイルとして保存する方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# A1セルにデータを入力
sheet["A1"] = "データ"
# ワークブックを保存
workbook.save("保存したファイル.xlsx")
このコードを実行すると、カレントディレクトリに「保存したファイル.xlsx」という名前のExcelファイルが作成されます。
上書き保存と新規保存の違い
上書き保存は、既存のファイルに対して新しいデータを保存することを指します。
一方、新規保存は新しいファイル名を指定して保存することです。
以下のコードでは、上書き保存と新規保存の例を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# A1セルにデータを入力
sheet["A1"] = "上書き保存の例"
# 上書き保存
workbook.save("上書き保存.xlsx")
# 新しいワークブックを作成
new_workbook = Workbook()
new_sheet = new_workbook.active
# A1セルにデータを入力
new_sheet["A1"] = "新規保存の例"
# 新規保存
new_workbook.save("新規保存.xlsx")
このコードを実行すると、「上書き保存.xlsx」が上書きされ、「新規保存.xlsx」が新たに作成されます。
保存時のファイル形式(.xlsx以外の形式)
openpyxlは主に.xlsx形式のファイルを扱いますが、他の形式にも対応しています。
以下の表に、一般的なExcelファイル形式とその特徴を示します。
ファイル形式 | 拡張子 | 特徴 |
---|---|---|
Excel Workbook | .xlsx | 新しいExcel形式。データの圧縮が可能。 |
Excel Macro-Enabled Workbook | .xlsm | マクロを含むExcelファイル。 |
Excel 97-2003 Workbook | .xls | 古いExcel形式。新しい機能は使用できない。 |
Excel Template | .xltx | テンプレートファイル。新しいファイルを作成するための雛形。 |
Excel Macro-Enabled Template | .xltm | マクロを含むテンプレートファイル。 |
これらの形式を使用する際は、saveメソッド
でファイル名に適切な拡張子を指定することで、異なる形式で保存できます。
例えば、マクロを含むファイルを保存する場合は、.xlsm
を指定します。
既存のExcelファイルを編集する
既存ファイルの読み込み
既存のExcelファイルを編集するには、load_workbook関数
を使用してファイルを読み込みます。
以下のサンプルコードでは、既存のExcelファイルを読み込む方法を示します。
from openpyxl import load_workbook
# 既存のExcelファイルを読み込む
workbook = load_workbook("既存ファイル.xlsx")
このコードを実行すると、「既存ファイル.xlsx」という名前のExcelファイルが読み込まれ、workbook
オブジェクトに格納されます。
シートの選択とデータの編集
読み込んだワークブックから特定のシートを選択し、データを編集することができます。
以下のコードでは、特定のシートを選択し、A1セルのデータを変更する方法を示します。
from openpyxl import load_workbook
# 既存のExcelファイルを読み込む
workbook = load_workbook("既存ファイル.xlsx")
# シートを選択
sheet = workbook["シート1"]
# A1セルのデータを編集
sheet["A1"] = "新しいデータ"
# ワークブックを保存
workbook.save("既存ファイル.xlsx")
このコードを実行すると、「シート1」のA1セルのデータが「新しいデータ」に変更され、ファイルが上書き保存されます。
セルの値の取得方法
特定のセルの値を取得するには、セルを指定してその値を参照します。
以下のコードでは、A1セルの値を取得し、表示する方法を示します。
from openpyxl import load_workbook
# 既存のExcelファイルを読み込む
workbook = load_workbook("既存ファイル.xlsx")
# シートを選択
sheet = workbook["シート1"]
# A1セルの値を取得
value = sheet["A1"].value
print(value)
このコードを実行すると、A1セルの値がコンソールに表示されます。
データの上書きと追加
既存のデータを上書きすることも、新しいデータを追加することも可能です。
以下のコードでは、A2セルに新しいデータを追加する方法を示します。
from openpyxl import load_workbook
# 既存のExcelファイルを読み込む
workbook = load_workbook("既存ファイル.xlsx")
# シートを選択
sheet = workbook["シート1"]
# A1セルのデータを上書き
sheet["A1"] = "上書きデータ"
# A2セルに新しいデータを追加
sheet["A2"] = "追加データ"
# ワークブックを保存
workbook.save("既存ファイル.xlsx")
このコードを実行すると、A1セルのデータが「上書きデータ」に変更され、A2セルに「追加データ」が入力されます。
ファイルは上書き保存されます。
応用例
グラフの作成と挿入
openpyxlを使用してExcelファイルにグラフを作成し、挿入することができます。
以下のサンプルコードでは、データを基に棒グラフを作成し、シートに挿入する方法を示します。
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# データを入力
data = [
["商品", "売上"],
["商品A", 30],
["商品B", 20],
["商品C", 50],
]
for row in data:
sheet.append(row)
# グラフのデータ範囲を指定
data_reference = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=4)
categories_reference = Reference(sheet, min_col=1, min_row=2, max_row=4)
# 棒グラフを作成
chart = BarChart()
chart.add_data(data_reference, titles_from_data=True)
chart.set_categories(categories_reference)
chart.title = "売上グラフ"
chart.x_axis.title = "商品"
chart.y_axis.title = "売上"
# グラフをシートに挿入
sheet.add_chart(chart, "D1")
# ワークブックを保存
workbook.save("グラフの作成.xlsx")
このコードを実行すると、売上データに基づいた棒グラフが「グラフの作成.xlsx」に挿入されます。
セルの結合と分割
セルを結合することで、複数のセルを1つの大きなセルにすることができます。
以下のコードでは、A1からC1までのセルを結合する方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# セルを結合
sheet.merge_cells("A1:C1")
sheet["A1"] = "結合されたセル"
# ワークブックを保存
workbook.save("セルの結合.xlsx")
セルの分割は、結合したセルを元に戻すことを指します。
以下のコードでは、先ほど結合したセルを分割する方法を示します。
from openpyxl import load_workbook
# 既存のExcelファイルを読み込む
workbook = load_workbook("セルの結合.xlsx")
sheet = workbook.active
# セルを分割
sheet.unmerge_cells("A1:C1")
# ワークブックを保存
workbook.save("セルの分割.xlsx")
条件付き書式の設定
条件付き書式を使用すると、特定の条件に基づいてセルの書式を変更できます。
以下のコードでは、A列の値が50以上の場合にセルの背景色を緑に変更する方法を示します。
from openpyxl import Workbook
from openpyxl.styles import PatternFill
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# データを入力
data = [10, 20, 50, 70, 90]
for index, value in enumerate(data, start=1):
sheet[f"A{index}"] = value
# 条件付き書式を設定
for cell in sheet["A"]:
if cell.value >= 50:
cell.fill = PatternFill(start_color="00FF00", end_color="00FF00", fill_type="solid")
# ワークブックを保存
workbook.save("条件付き書式.xlsx")
画像の挿入
Excelファイルに画像を挿入することも可能です。
以下のコードでは、指定した画像ファイルをシートに挿入する方法を示します。
from openpyxl import Workbook
from openpyxl.drawing.image import Image
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# 画像を挿入
img = Image("画像ファイル.png")
sheet.add_image(img, "B2")
# ワークブックを保存
workbook.save("画像の挿入.xlsx")
このコードを実行すると、指定した画像が「画像の挿入.xlsx」に挿入されます。
フィルタや並べ替えの適用
データにフィルタや並べ替えを適用することで、特定の条件に合ったデータを簡単に表示できます。
以下のコードでは、A列のデータを昇順に並べ替える方法を示します。
from openpyxl import Workbook
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# データを入力
data = [30, 10, 50, 20, 40]
for index, value in enumerate(data, start=1):
sheet[f"A{index}"] = value
# データを昇順に並べ替え
sorted_data = sorted(data)
for index, value in enumerate(sorted_data, start=1):
sheet[f"A{index}"] = value
# ワークブックを保存
workbook.save("データの並べ替え.xlsx")
このコードを実行すると、A列のデータが昇順に並べ替えられた「データの並べ替え.xlsx」が作成されます。
フィルタを適用する場合は、ExcelのUIを使用して手動で設定する必要がありますが、openpyxlではフィルタの設定も可能です。
エラー処理とデバッグ
ファイルが存在しない場合のエラー処理
Excelファイルを読み込む際に、指定したファイルが存在しない場合にはエラーが発生します。
このエラーを適切に処理するためには、try
とexcept
を使用します。
以下のサンプルコードでは、ファイルが存在しない場合のエラー処理を示します。
from openpyxl import load_workbook
# ファイル名
file_name = "存在しないファイル.xlsx"
try:
# 既存のExcelファイルを読み込む
workbook = load_workbook(file_name)
except FileNotFoundError:
print(f"エラー: '{file_name}' が見つかりません。")
このコードを実行すると、指定したファイルが存在しない場合にエラーメッセージが表示されます。
読み込み専用ファイルの扱い
Excelファイルが読み込み専用で開かれている場合、データの編集や保存ができません。
この場合もエラー処理を行うことが重要です。
以下のコードでは、読み込み専用ファイルを扱う際のエラー処理を示します。
from openpyxl import load_workbook
# 読み込み専用のExcelファイルを読み込む
file_name = "読み込み専用ファイル.xlsx"
try:
workbook = load_workbook(file_name, read_only=True)
# 読み込み専用でデータを取得
sheet = workbook.active
value = sheet["A1"].value
print(f"A1セルの値: {value}")
except Exception as e:
print(f"エラー: {e}")
このコードでは、読み込み専用でファイルを開き、データを取得しています。
エラーが発生した場合には、エラーメッセージが表示されます。
無効なセル参照のエラー対策
無効なセル参照を行うと、IndexError
が発生します。
このエラーを防ぐためには、セルの存在を確認することが重要です。
以下のコードでは、セルの存在を確認してから値を取得する方法を示します。
from openpyxl import load_workbook
# 既存のExcelファイルを読み込む
file_name = "既存ファイル.xlsx"
workbook = load_workbook(file_name)
sheet = workbook.active
# セルの存在を確認してから値を取得
cell_reference = "A10" # 存在しないセルの例
try:
value = sheet[cell_reference].value
print(f"{cell_reference}セルの値: {value}")
except KeyError:
print(f"エラー: '{cell_reference}' セルは存在しません。")
このコードを実行すると、指定したセルが存在しない場合にエラーメッセージが表示されます。
これにより、無効なセル参照によるエラーを防ぐことができます。
よくある質問
まとめ
この記事では、Pythonのopenpyxlライブラリを使用してExcelファイルを作成、編集、保存する方法について詳しく解説しました。
具体的には、データの書き込みやセルの書式設定、グラフの作成、条件付き書式の適用など、さまざまな機能を活用する方法を紹介しました。
これらの知識を活かして、実際の業務やプロジェクトでExcelファイルを効率的に操作することができるでしょう。
ぜひ、openpyxlを使って自分のデータ処理や分析のスキルを向上させてみてください。