Dataiku × openpyxl で業務効率化!テンプレートExcelを自動生成する方法
本記事では、Dataikuでデータを整え、openpyxlを使ってテンプレート通りのExcelファイルを自動生成する方法をご紹介します。
はじめに
日々の業務で「同じフォーマットのExcelファイルを複数作成する」作業に時間を取られていませんか?
店舗別の売上報告書、部署ごとの月次レポート、顧客向けの請求書など、内容は異なってもレイアウトは共通 ― そんな定型資料はどの職場にも存在します。
手作業でコピー&ペーストを繰り返していると、ヒューマンエラーのリスクが高まるうえ、作業時間も膨れ上がります。
そこで本記事では、Dataikuでデータを整え、openpyxlを使ってテンプレート通りのExcelファイルを自動生成する方法をご紹介します。
一度仕組みを作ってしまえば、数百ファイルでも数分で出力可能になり、業務効率が大幅に向上します。
使用ツールの紹介
Dataiku
ノーコード/ローコードでデータ処理や分析ができるプラットフォームです。SQLやPythonに不慣れでも直感的にデータを加工でき、またPythonレシピを使えば高度な処理も柔軟に組み込めます。本記事では Excel出力用のデータを整形する役割 を担います。
openpyxl
Python で Excel(.xlsx)を読み書きできるライブラリです。セルの値の更新はもちろん、書式・罫線・フォントなどテンプレートのレイアウトを保持したまま編集できる点が強みです。今回は 既存のテンプレートを利用して複数ファイルを自動生成する役割 を担います。
今回作成するもの
今回作成する成果物と読み込むテンプレートは以下の通りです。
成果物

テンプレート

実装手順
- Dataikuにログインし、「+NEW PROJECT」で新しいプロジェクトを作成してください。
- 「+Dataset」から「Folder」をクリックしてください。

- 任意のラベル(Folder名)を付けて、store intoを「filesystem_folders」にしてください。

- 作成したFolderにテンプレートとなるExcelファイルをアップロードしてください。
- 次にopenpyxlが使用できるようにしていきます。
a . Adminstrationを選択してください

b . Code EnvsからNEW PYTHON ENVを選択し、新しい仮想環境を作成しましょう。(もともと仮想環境がある人はそちらを選択してください。)
c . Packages to installを選択し、xlsxwriterを追加してください。
b . フロー上に戻り、タブのSettingsを選択し、Code env selectionのPython code envを先ほど追加したものに変更してください。
- Pythonレシピを選択し、Inputに先ほど作成したテンプレートFolder、Outputに任意の名前を入力し、「CREATE RECIPE」を選択してください。

- 以下のコードを参考に、Pythonレシピ内にコードを記載してください。
import dataiku
import pandas as pd, numpy as np
from dataiku import pandasutils as pdu
from openpyxl import load_workbook,Workbook
# テンプレートフォルダの宣言
template_folder_id = "template_folder" # フォルダIDを設定する
template_folder = dataiku.Folder(template_folder_id)
# エクセルファイルの読み込み
excel_file_path = os.path.join(template_folder.get_path(), "ブログ用エクセル.xlsx")
wb = load_workbook(excel_file_path)
ws = wb.active
# ---- Excel内に値を挿入 --------------------
values_list = [1000, 2000, 1500, 1500, 3000, 500, 2000]
start_row, start_col = 3, 2 # B5 が (row=5, col=2)
percentage = 0.1
total_sum = 0
for i in range(len(values_list)):
# B列にvalues_listの値を挿入
value_b = values_list[i]
ws.cell(row=start_row + i, column=start_col, value=value_b)
# C列にB列の10%の金額を挿入
value_c = value_b * percentage
ws.cell(row=start_row + i, column=start_col + 1, value=value_c)
# D列にB列とC列の合計を挿入
value_d = value_b + value_c
ws.cell(row=start_row + i, column=start_col + 2, value=value_d)
# Excel_Folder に保存
def save_wb_to_folder(wb, folder_id, excel_name):
folder = dataiku.Folder(folder_id)
if folder.get_path(): # ローカル接続
wb.save(os.path.join(folder.get_path(), excel_name))
save_wb_to_folder(wb, "output_folder", "output.xlsx")
- output_folderの中のoutput.xlsxの中身を確認してみましょう。
output.xlsx

成果物と同じものを作成することができました。
複数のファイルを出力する方法
先ほどのコードを以下のように変えることで複数のシートを持つエクセルファイルにすることも可能です。
import dataiku
import pandas as pd
import numpy as np
from dataiku import pandasutils as pdu
from openpyxl import Workbook
# テンプレートフォルダの宣言
template_folder_id = "template_folder" # フォルダIDを設定する
template_folder = dataiku.Folder(template_folder_id)
# エクセルファイルの読み込み
wb = Workbook()
values_list = [1000, 2000, 1500, 1500, 3000, 500, 2000]
percentage = 0.1
def insert_data_into_sheet(ws, values_list, start_row, start_col):
for i in range(len(values_list)):
# B列にvalues_listの値を挿入
value_b = values_list[i]
ws.cell(row=start_row + i, column=start_col, value=value_b)
# C列にB列の10%の金額を挿入
value_c = value_b * percentage
ws.cell(row=start_row + i, column=start_col + 1, value=value_c)
# D列にB列とC列の合計を挿入
value_d = value_b + value_c
ws.cell(row=start_row + i, column=start_col + 2, value=value_d)
# シート1にデータを挿入
ws1 = wb.active
ws1.title = "Sheet1"
insert_data_into_sheet(ws1, values_list, start_row=3, start_col=2)
# シート2にデータを挿入
ws2 = wb.create_sheet(title="Sheet2")
insert_data_into_sheet(ws2, values_list, start_row=3, start_col=2)
# シート3にデータを挿入
ws3 = wb.create_sheet(title="Sheet3")
insert_data_into_sheet(ws3, values_list, start_row=3, start_col=2)
# Excelファイルを保存する関数
def save_wb_to_folder(wb, folder_id, excel_name):
output_folder = dataiku.Folder(folder_id)
if output_folder.get_path(): # ローカル接続
wb.save(os.path.join(output_folder.get_path(), excel_name))
# Excelファイルを指定したフォルダに保存
save_wb_to_folder(wb, "output_folder", "output.xlsx")今回は一つのテンプレートしか読み込んでいないですが、複数のテンプレートがある場合でも、同じようにシートごとに処理をすることが可能です。
まとめ
本記事では、Dataiku と openpyxl を組み合わせて テンプレート通りのExcelファイルを自動生成する仕組み を紹介しました。
手作業では数時間かかる作業を自動化することで、時間の節約だけでなく、人為的なミスを防ぎ、より価値の高い分析や意思決定に集中できるようになるでしょう。
