OpenPyXl

OpenPyXLを使った実用的なスクリプト例&効率的なデータ操作方法

OpenPyXLは、PythonでExcelファイルを操作するための非常に強力なライブラリです。本記事では、実際の業務や日常作業に役立つ実用的なスクリプト例と、効率的なデータ操作方法を紹介します。


1. Excelファイルのデータを一括修正するスクリプト

例えば、売上データが記載されたExcelファイルで、特定の値を増減させる必要がある場合に役立つスクリプトです。

実例:価格データに10%の増加を適用

from openpyxl import load_workbook

# ファイルを読み込む
workbook = load_workbook('sales_data.xlsx')
sheet = workbook['Sheet1']

# 特定の列に対して値を修正
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=3, max_col=3):
    for cell in row:
        cell.value = round(cell.value * 1.1, 2)  # 10%増加

# 修正したデータを保存
workbook.save('sales_data_updated.xlsx')
print("データの更新が完了しました")

ポイント

  • iter_rows: 行単位でデータを効率よく処理します。
  • cell.value: 値を動的に変更可能です。

2. 条件に基づいて行を削除するスクリプト

データクレンジングの一環として、特定の条件を満たす行を削除することがよくあります。

実例:売上が0の行を削除

from openpyxl import load_workbook

# ファイルを読み込む
workbook = load_workbook('sales_data.xlsx')
sheet = workbook['Sheet1']

# 条件に一致する行を削除
rows_to_delete = []
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row):
    if row[2].value == 0:  # 3列目(売上)が0の場合
        rows_to_delete.append(row[0].row)

for row_num in sorted(rows_to_delete, reverse=True):
    sheet.delete_rows(row_num)

# 保存
workbook.save('sales_data_cleaned.xlsx')
print("条件に一致する行を削除しました")

ポイント

  • delete_rows: 指定した行を削除します。
  • 条件に一致する行番号をリストに格納し、逆順に削除することでエラーを防ぎます。

3. 複数のExcelファイルをマージするスクリプト

複数のExcelファイルを1つのファイルにまとめる作業は、手作業では時間がかかります。このスクリプトを使えば簡単に自動化できます。

実例:複数ファイルのデータを1つのシートに統合

from openpyxl import load_workbook, Workbook

# 新しいExcelファイルを作成
combined_workbook = Workbook()
combined_sheet = combined_workbook.active
combined_sheet.title = "Combined Data"

# ファイルリスト
files = ['data1.xlsx', 'data2.xlsx', 'data3.xlsx']

# データを統合
for file in files:
    workbook = load_workbook(file)
    sheet = workbook.active

    for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, values_only=True):
        combined_sheet.append(row)

# 保存
combined_workbook.save('combined_data.xlsx')
print("データを統合しました")

ポイント

  • 複数ファイルのデータを1つのシートにまとめることで、分析が容易になります。
  • **values_only=True**を使用することで、セルオブジェクトではなく値のみを取得します。

4. 自動でレポートを作成するスクリプト

営業チーム向けに、月次売上レポートを自動生成する例です。

実例:月次売上レポートを作成

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

# データ
sales_data = [
    ["Month", "Sales"],
    ["January", 1000],
    ["February", 1500],
    ["March", 2000],
    ["April", 1800]
]

# 新しいExcelファイルを作成
workbook = Workbook()
sheet = workbook.active
sheet.title = "Monthly Sales Report"

# データを書き込む
for row in sales_data:
    sheet.append(row)

# 見出しを太字に設定
header_font = Font(bold=True)
for cell in sheet[1]:
    cell.font = header_font

# 棒グラフを作成
chart = BarChart()
data_ref = Reference(sheet, min_col=2, min_row=1, max_row=5)
categories_ref = Reference(sheet, min_col=1, min_row=2, max_row=5)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(categories_ref)
chart.title = "Monthly Sales"
chart.x_axis.title = "Month"
chart.y_axis.title = "Sales"

# シートにグラフを追加
sheet.add_chart(chart, "D2")

# 保存
workbook.save('monthly_sales_report.xlsx')
print("月次売上レポートを作成しました")

ポイント

  • **Font**を使ってセルのフォーマットを設定できます。
  • グラフ作成に**BarChart**を使用して視覚的なレポートを生成します。

5. 複数のシートを持つExcelファイルを作成するスクリプト

複数のシートに分けてデータを保存することで、整理されたExcelファイルを作成できます。

実例:月ごとの売上データをシートごとに保存

from openpyxl import Workbook

# 月ごとのデータ
monthly_data = {
    "January": [100, 200, 300],
    "February": [150, 250, 350],
    "March": [200, 300, 400]
}

# 新しいExcelファイルを作成
workbook = Workbook()

for month, sales in monthly_data.items():
    sheet = workbook.create_sheet(title=month)
    for i, value in enumerate(sales, start=1):
        sheet[f"A{i}"] = value

# デフォルトシートを削除
del workbook["Sheet"]

# 保存
workbook.save("monthly_sales.xlsx")
print("月ごとのデータを保存したファイルを作成しました")

まとめ

この記事では、OpenPyXLを使った以下の実用的なスクリプト例を紹介しました:

  1. データの一括修正
  2. 条件付き行の削除
  3. 複数ファイルの統合
  4. 自動レポート生成
  5. 複数シートの作成

これらのスクリプトを活用すれば、日常業務や分析作業を大幅に効率化できます。ぜひ、自分のデータに応用してみてください!

上部へスクロール