データ分析
2025/09/17
古川 直輝

Dataiku × openpyxl で業務効率化!テンプレートExcelを自動生成する方法

本記事では、Dataikuでデータを整え、openpyxlを使ってテンプレート通りのExcelファイルを自動生成する方法をご紹介します。

はじめに

日々の業務で「同じフォーマットのExcelファイルを複数作成する」作業に時間を取られていませんか?


店舗別の売上報告書、部署ごとの月次レポート、顧客向けの請求書など、内容は異なってもレイアウトは共通 ― そんな定型資料はどの職場にも存在します。


手作業でコピー&ペーストを繰り返していると、ヒューマンエラーのリスクが高まるうえ、作業時間も膨れ上がります。


そこで本記事では、Dataikuでデータを整え、openpyxlを使ってテンプレート通りのExcelファイルを自動生成する方法をご紹介します。


一度仕組みを作ってしまえば、数百ファイルでも数分で出力可能になり、業務効率が大幅に向上します。


使用ツールの紹介

Dataiku


ノーコード/ローコードでデータ処理や分析ができるプラットフォームです。SQLやPythonに不慣れでも直感的にデータを加工でき、またPythonレシピを使えば高度な処理も柔軟に組み込めます。本記事では Excel出力用のデータを整形する役割 を担います。


openpyxl


Python で Excel(.xlsx)を読み書きできるライブラリです。セルの値の更新はもちろん、書式・罫線・フォントなどテンプレートのレイアウトを保持したまま編集できる点が強みです。今回は 既存のテンプレートを利用して複数ファイルを自動生成する役割 を担います。


今回作成するもの

今回作成する成果物と読み込むテンプレートは以下の通りです。


成果物



テンプレート


実装手順


  1. Dataikuにログインし、「+NEW PROJECT」で新しいプロジェクトを作成してください。

  2. 「+Dataset」から「Folder」をクリックしてください。

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

  4. 作成したFolderにテンプレートとなるExcelファイルをアップロードしてください。

  5. 次にopenpyxlが使用できるようにしていきます。


      a . Adminstrationを選択してください


      b . Code EnvsからNEW PYTHON ENVを選択し、新しい仮想環境を作成しましょう。(もともと仮想環境がある人はそちらを選択してください。)


      c . Packages to installを選択し、xlsxwriterを追加してください。


      b . フロー上に戻り、タブのSettingsを選択し、Code env selectionのPython code envを先ほど追加したものに変更してください。



    1. Pythonレシピを選択し、Inputに先ほど作成したテンプレートFolder、Outputに任意の名前を入力し、「CREATE RECIPE」を選択してください。

    2. 以下のコードを参考に、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")



    3. 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ファイルを自動生成する仕組み を紹介しました。


    手作業では数時間かかる作業を自動化することで、時間の節約だけでなく、人為的なミスを防ぎ、より価値の高い分析や意思決定に集中できるようになるでしょう。


    New call-to-action