[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ファイルを読み込む際に、指定したファイルが存在しない場合にはエラーが発生します。

このエラーを適切に処理するためには、tryexceptを使用します。

以下のサンプルコードでは、ファイルが存在しない場合のエラー処理を示します。

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}' セルは存在しません。")

このコードを実行すると、指定したセルが存在しない場合にエラーメッセージが表示されます。

これにより、無効なセル参照によるエラーを防ぐことができます。

よくある質問

openpyxlで大きなデータを扱う際のパフォーマンスは?

openpyxlは大きなデータセットを扱う際に、メモリ使用量が増加する可能性があります。

特に、数万行以上のデータを処理する場合、パフォーマンスが低下することがあります。

これを改善するためには、read_onlyモードを使用してファイルを読み込むことが推奨されます。

このモードでは、メモリの使用量を抑えつつ、データを効率的に処理できます。

また、データの書き込み時には、write_onlyモードを使用することで、さらにパフォーマンスを向上させることができます。

セルの書式設定はどのように行いますか?

セルの書式設定は、openpyxlのstylesモジュールを使用して行います。

フォント、背景色、罫線、数値形式など、さまざまな書式を設定できます。

以下は、セルのフォントを太字にし、背景色を変更する例です。

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill
# 新しいワークブックを作成
workbook = Workbook()
sheet = workbook.active
# A1セルにデータを入力
sheet["A1"] = "書式設定の例"
# フォントを太字に設定
sheet["A1"].font = Font(bold=True)
# 背景色を変更
sheet["A1"].fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
# ワークブックを保存
workbook.save("書式設定の例.xlsx")

このように、FontPatternFillを使用して、セルの書式を簡単に設定できます。

他のExcelライブラリと比較してopenpyxlの利点は?

openpyxlの主な利点は以下の通りです。

  • .xlsx形式のサポート: openpyxlは、Excelの新しいファイル形式である.xlsxを完全にサポートしています。
  • 豊富な機能: セルの書式設定、グラフの作成、条件付き書式、画像の挿入など、多くの機能を提供しています。
  • Pythonicなインターフェース: Pythonの文法に沿った直感的なインターフェースを持っており、初心者でも扱いやすいです。
  • 活発なコミュニティ: openpyxlは広く使用されており、活発なコミュニティが存在するため、ドキュメントやサポートが充実しています。

他のライブラリ(例:pandasやxlrd)と比較すると、openpyxlは特にExcelファイルの作成や編集に特化しており、Excelの機能をフルに活用したい場合に適しています。

まとめ

この記事では、Pythonのopenpyxlライブラリを使用してExcelファイルを作成、編集、保存する方法について詳しく解説しました。

具体的には、データの書き込みやセルの書式設定、グラフの作成、条件付き書式の適用など、さまざまな機能を活用する方法を紹介しました。

これらの知識を活かして、実際の業務やプロジェクトでExcelファイルを効率的に操作することができるでしょう。

ぜひ、openpyxlを使って自分のデータ処理や分析のスキルを向上させてみてください。

  • URLをコピーしました!
目次から探す