はじめに
openpyxlを使ってPythonでExcelファイルを編集します。
$ pip install openpyxl
Excelのセルを入力するスクリプト
以下のスクリプトでは次の単純なセル入力を実装してみます。
example.xlsx
を開く- ワークシートを選択
- 指定したセルに値を設定
- ブックを上書き保存
import openpyxl # 編集するExcelブックのパス path_to_excel_book = 'example.xlsx' # ブックを開く wb = openpyxl.load_workbook(path_to_excel_book) # ワークシートを選択 ws = wb.active # A1形式でセル編集 ws['A1'] = 'foo' ws['B3'] = 'bar' # R1C1形式でセル編集 ws.cell(row=5, column=1).value = 'foo' ws.cell(row=5, column=2).value = 'bar' ws.cell(row=6, column=3).value = 'foo' ws.cell(row=6, column=4).value = 'bar' ws.cell(row=7, column=5).value = 'foo' ws.cell(row=7, column=6).value = 'bar' # ブックを上書き保存 wb.save(path_to_excel_book)
たったこれだけです。
実装したスクリプトを実行すると以下のようにExcelシートに値が入力されます。
以下の実行結果では新規作成したファイルを使っていますが、事前にExcelシートに設定しておいたフォーマットは維持されます。
実際のユースケースとしては、テンプレートとなる体裁を整えたファイルを事前に用意しておき、
DBやファイル等から取得した値をセルに設定することになるでしょう。
特に説明していませんが、openpyxlを使えばブックやシートを作成したり、行を挿入したり、図を作成したりできるので、大抵の手入力作業は自動化できると思います。
Djangoのビューで編集したExcelファイルをダウンロード
openpyxl.writer.excel.save_virtual_workbookでメモリ上のワークブックを返却できますので、前述したようなスクリプトで加工したブックをダウンロードする機能を簡単に実装できます。
from django.http import HttpResponse from openpyxl.writer.excel import save_virtual_workbook ... def download(request): # Excelブックの編集処理 wb = openpyxl.load_workbook(...) # ... response = HttpResponse(content=save_virtual_workbook(wb), content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename="your_book.xlsx"' return response