LoginSignup
0
1

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. まとめ

毎度シートを昇順にするのは面倒であることから、今回のコードを作成しました。サクッと作成したので、並べ替えたいシートとそうでないシート(例えば、特定のシートは並べ替えない)の工夫はできていないので、次の課題として考えています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1