【Python/openpyxl】エクセル操作:指定した数のエクセルファイルを自動作成する

/

【Python/openpyxl】エクセル操作:指定した数のエクセルファイルを自動作成する

本記事ではPythonopenpyxlを使って、指定した数のエクセルファイルを自動作成するアプリケーションについて解説いたします。

仕事で空のエクセルファイルを複数、仮に20個作る必要があった場合、手動だと多くの時間が必要になります。

しかしこのプログラムであれば、一瞬で20個の空のExcelファイルを作成することが可能です。

作成するプログラム概要

プログラムの流れ

作成するプログラムを起動すると以下の流れでプログラムは動きます。

  1. 「作成するエクセルファイルの数を入力してください:」と表示され、数値を入力する
  2. 「作成するエクセルファイルのファイル名を入力してください:」と表示され、ファイル名を入力する
  3. 入力された数値分のエクセルファイルをプログラムが保存されているディレクトリ内に、「入力されたタイトル名_数値」のタイトルで保存される
> python create_book.py
作成するエクセルファイルの数を入力してください: 2
作成するエクセルファイルのファイル名を入力してください: test
自動作成されるエクセルファイル

ソースコード

上記で説明したプログラムのソースコードを以下に記します。
ぜひコピペしてどのように動くのか確認してみてください。

まだpipでopenpyxlをインストールしていない方はopenpyxlパッケージのインストールを行ってください。

import openpyxl

number = input('作成するエクセルファイルの数を入力してください: ')
title = input('作成するエクセルファイルのファイル名を入力してください: ')
for i in range(int(number)):
    wb = openpyxl.Workbook()
    wb.save(title + '_' + str(i) + '.xlsx')

プログラム解説

入力を求める

プログラムではユーザーに作成するファイル数と、そのタイトル名を入力してもらいます。
ここでユーザーに入力を求めるためにinput関数を使用します。

number = input('作成するエクセルファイルの数を入力してください: ')
title = input('作成するエクセルファイルのファイル名を入力してください: ')
input関数の解説

input関数はユーザーからデータ入力を求める標準入力として使われます。入力されたデータは文字列として返します

ブック作成のコードを繰り返す

入力された数値分のエクセルファイルを作成させるために、エクセルファイルを作成するコードを入力された数だけ繰り返します。

繰り返しにはfor文を使用し、繰り返し回数の設定にはrangeを使います。

for i in range(int(number)):

ここでint(number)を使っているのは、input関数で返されたデータがstr型のため、int型に変える処理をするためです。

タイトルを付ける

ユーザーが入力したタイトルに「_+数値+.xlsx」を付ける処理をします。

今回のプログラムでは以下のようにタイトルを付けました。

wb.save(title + '_' + str(i) + '.xlsx')

ここでformatメソッドやf_stringsを使うとより可読性がよくなり、スマートなプログラムになります。

wb.save('{}_{}.xlsx'.format(title, i))
wb.save(f'{title}_{i}.xlsx')

formatメソッドやf_stringsの使い方については以下記事をご参考ください。

GUIデスクトップアプリケーション作成

上記で紹介しているプログラムを使うには、ユーザーのパソコンにPythonがインストールされていることが前提となります。

これでは仕事で同僚に配布して使ってもらうには使い勝手が悪いです。

そこでまずは「指定した数のエクセルファイルを自動生成するアプリ」をGUIデスクトップアプリにします。

使用するGUIデスクトップアプリ作成のライブラリはtkinterです。
tkinterについて知りたい方は以下記事をご参照ください。

GUIアプリを作成したら、pythonがインストールされていない環境でも使用できるようにpyinstallerを使ってexeファイルにしましょう。
Pythonのpyinstallerによるexeファイル作成の方法は以下記事をご参照ください。

GUIアプリ概要

GUIアプリでは、作成するエクセルファイルの数・エクセルのタイトル・エクセルを出力するフォルダ選択ができるようにします。

GUI画面は以下のようになります。

Pythonのtkinterで作成するGUIアプリ:複数のエクセル作成

今回作成するGUIアプリの使い方手順は以下に記します。

  1. 「エクセル作成数」に数値を入力する
  2. 「エクセルタイトル」に希望のタイトルを入力する
  3. 「出力先フォルダー」にある「検索」ボタンを押して、エクセルファイルの出力先を選択する
  4. 「実行」ボタンを押すことでプログラムが走り、作成が完了した後ポップアップで結果画面が表示される

ソースコード

import tkinter as tk
import tkinter.ttk as ttk
import openpyxl
from tkinter import filedialog
from tkinter import messagebox

def folder_set():
    fld = filedialog.askdirectory()
    entry_export.insert(0, fld)

def execute():
    number = entry_number.get()
    title = entry_title.get()
    path = entry_export.get()
    print(path)
    for i in range(int(number)):
        wb = openpyxl.Workbook()
        wb.save(path + '/' + title + '_' + str(i) + '.xlsx')
    messagebox.showinfo("結果", "エクセルファイルを作成しました")

# rootメインウィンドウの設定
root = tk.Tk()
root.title("エクセル作成アプリ")
root.geometry("400x150")

# メインフレームの作成と設置
frame = ttk.Frame(root)
frame.grid(row=0, column=0, sticky=tk.NSEW, padx=10, pady=10)

# 各種ウィジェットの作成
label_number = ttk.Label(frame, text="エクセル作成数:")
entry_number = ttk.Entry(frame, width=5)

label_title = ttk.Label(frame, text="エクセルタイトル:")
entry_title = ttk.Entry(frame, width=30)

label_export = ttk.Label(frame, text="出力先フォルダー:")
entry_export = ttk.Entry(frame, width=30)
button_export = ttk.Button(frame, text="検索", command=folder_set)

button_execute = ttk.Button(frame, text="実行", command=execute)

# 各種ウィジェットの設置
label_number.grid(row=0, column=0)
entry_number.grid(row=0, column=1, sticky=tk.W)

label_title.grid(row=1, column=0)
entry_title.grid(row=1, column=1, pady=5)

label_export.grid(row=2, column=0)
entry_export.grid(row=2, column=1)
button_export.grid(row=2, column=2, padx=5)

button_execute.grid(row=3, column=1, pady=3)


root.mainloop()

上記プログラムを記述したpyファイルをpyinstallerでexe化すれば、同僚に配布できるデスクトップアプリケーションの完成です。

まとめ

指定した数のエクセルファイルを自動作成するアプリケーションはいかがでしたか。

今回説明したアプリだけでなく、Pythonのopenpyxlを使って様々なエクセル業務の効率化を測ることができます。

ぜひopenpyxlなどのPythonを使っていろいろ挑戦してみてください。

連載記事

Pythonによるエクセル操作の記事を定期的にアップしております。
ぜひエクセル仕事の効率化のためにご参照ください。