LoginSignup
4
4

More than 3 years have passed since last update.

Excelファイルを右クリックして、各シート毎のファイルに分割するツールをPythonで作ってみた

Posted at

背景・目的

Excelファイルにある各シート別ファイルとして分割したいという依頼を受けました。本来はVBA案件かと思うのですが、Excelファイルをわざわざ開いてマクロを起動するのも面倒。というか、そもそもVBAが書きたくない。
というわけで、Excelファイルを右クリックして、各シート毎のファイルに分割するツールをPythonで作ってみたいと思います。

外部ライブラリのインストール

Excelを操作するためのライブラリと、ファイルのパス作成のためのライブラリが必要になります。標準では無いので、事前にインストールしておきます。

$ pip install win32com.client
$ pip install pathlib
$ pip install openpyxl

コード

excel_split.py
import os
import glob
import win32com.client
import pathlib
import openpyxl
import sys

excel_dir = pathlib.Path(sys.argv[1]).parent #対象のExcelファイルが保存されているフォルダのパス
input_file = str(sys.argv[1]) #Excelファイルのパスを文字列に変換

#シートの一覧取得 (openpyxlを利用)
book = openpyxl.load_workbook(input_file)
sheets_list = book.sheetnames

for i in range(len(sheets_list)):

    # Excelを起動する
    app = win32com.client.Dispatch("Excel.Application")
    app.Visible = False
    app.DisplayAlerts = False

    # Excelでワークブックを読み込む
    sheet_no = i + 1 #excelのシートは1スタートのため1を足す
    book = app.Workbooks.Open(input_file)
    book.WorkSheets(sheet_no).Activate()
    new_book = app.Workbooks.Add()

    # 各シート毎に保存
    new_file = sheets_list[i] + '.xlsx'
    path_obj = pathlib.Path(excel_dir, new_file) #パスオブジェクトに変換
    output_file = path_obj.resolve() #絶対パスに変換
    book.Worksheets(sheet_no).Copy(Before=new_book.Worksheets(1)) #新しいExcelファイルに指定シートをコピー
    new_book.SaveAs(str(output_file)) #ファイル保存

    # Excelを終了
    app.Quit()

batファイルの作成

pyファイルはsendtoフォルダに置いてもキックされません。
作成したexcel_split.pyをキックするためにbatファイルを作ります。※PowerShellでも良いです。

excel_split.bat
python \\Pythonファイルの保存先\excel_split.py

Sendtoフォルダに保存

作成したbatファイルをsendtoフォルダに保存します。
sendtoフォルダは[Win]キーと[R]キー同時押しして、検索ボックスに「shell:sendto」と入れれば表示されます。

利用方法

Excelファイルを右クリック→送る→excel_split.batをクリックするとそのExcelファイルにある各シート毎のファイルが作成されます。
無題.png

補足:EXE化してユーザーへ配布したい場合

ユーザーに配布する場合は、EXE化したものを同じくsendtoフォルダに置いてあげればbatファイル不要で起動出来ます。以下の記事でEXE化の方法を紹介しています。

4
4
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
4
4