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を使った以下の実用的なスクリプト例を紹介しました:
- データの一括修正
- 条件付き行の削除
- 複数ファイルの統合
- 自動レポート生成
- 複数シートの作成
これらのスクリプトを活用すれば、日常業務や分析作業を大幅に効率化できます。ぜひ、自分のデータに応用してみてください!