Excelのシートを名前順に並べるのが面倒なので、Pythonのopenpyxlを使って並べ替えをするコードを作成しました。
今回の記事の参考として
1. 今回作成したコードの概要
- GUIでExcelファイルを指定する(Tkinterを使用。こちらは標準モジュールのためインストール不要)
- Excelファイルの読み込み(openpyxlを使用。標準モジュールではないため、インストール済みではない場合は
pip install openpyxl
を実行する必要あり) - Excelシートの名前を取得し、昇順でリストに格納
- Excelシートの末尾にシートを並べていく(ついでにフォント指定)
- Excelブックを
sorted_<book_name>.xlsx
で別米保存
※フォント指定はセル単位で行われており、空シートにはフォント指定しない。(本当は、シート単位でフォント指定したいが...)
2. 実際のコード
main.py
import os
from tkinter import Tk
from tkinter import filedialog
from openpyxl import load_workbook
from openpyxl.styles.fonts import Font
current_directory = os.path.dirname(__file__)
# Tkinterの設定
root = Tk()
root.geometry("0x0") # windowサイズを0
root.overrideredirect(1) # windowタイトルバーを消す
file_types = (
("excel file", "*.xlsx"),
)
# 選択したファイルの絶対パス
selected_file = filedialog.askopenfilename(initialdir=current_directory, filetypes=file_types)
# 選択したファイルの名前
file_name = os.path.basename(selected_file)
# Excelシートのフォント
font = Font(name="Yu Gothic", size=12)
# Excelファイルの読み込み
wb = load_workbook(selected_file)
# Excelシート一覧(昇順)
ws_title_list = sorted([ws.title for ws in wb.worksheets])
ws_length = len(ws_title_list) - 1
# Excelシート並び替え実行
for ws_title in ws_title_list:
ws = wb[ws_title]
for row in range(ws.max_row):
if ws.max_row != 1:
for col in range(ws.max_column):
ws.cell(row=row+1, column=col+1).font = font
wb.move_sheet(ws, offset=ws_length)
wb.save(selected_file.replace(file_name, f"sorted_{file_name}"))
3. まとめ
毎度シートを昇順にするのは面倒であることから、今回のコードを作成しました。サクッと作成したので、並べ替えたいシートとそうでないシート(例えば、特定のシートは並べ替えない)の工夫はできていないので、次の課題として考えています。