Excel 파일을 마우스 오른쪽 버튼으로 클릭하고 각 시트별로 파일을 분할하는 도구를 Python으로 만들었습니다.

6913 단어 파이썬Excelexe

배경·목적



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 파일의 각 시트에 대한 파일이 만들어집니다.


보충: EXE화하여 사용자에게 배포하고 싶은 경우



유저에게 배포하는 경우는, EXE화한 것을 동일하게 sendto 폴더에 두어 주면 bat 파일 불필요로 기동할 수 있습니다. 아래의 기사에서 EXE화의 방법을 소개하고 있습니다.

좋은 웹페이지 즐겨찾기