Excel 파일을 마우스 오른쪽 버튼으로 클릭하고 각 시트별로 파일을 분할하는 도구를 Python으로 만들었습니다.
배경·목적
Excel 파일에 있는 각 시트별 파일로 분할하고 싶다는 의뢰를 받았습니다. 본래는 VBA 안건이라고 생각합니다만, Excel 파일을 일부러 열어 매크로를 기동하는 것도 귀찮습니다. 라고 할까, 원래 VBA가 쓰고 싶지 않다.
그래서 Excel 파일을 마우스 오른쪽 버튼으로 클릭하고 각 시트마다 파일로 분할하는 도구를 Python으로 만들고 싶습니다.
외부 라이브러리 설치
Excel 작업을 위한 라이브러리와 파일 경로 생성을 위한 라이브러리가 필요합니다. 표준이 아니기 때문에 사전에 설치해 둡니다.
$ pip install win32com.client
$ pip install pathlib
$ pip install openpyxl
코드
excel_split.pyimport 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.batpython \\Pythonファイルの保存先\excel_split.py
Sendto 폴더에 저장
작성한 bat 파일을 sendto 폴더에 저장합니다.
sendto 폴더는 [Win]키와 [R]키 동시 누르고, 검색 박스에 「shell:sendto」라고 넣으면 표시됩니다.
이용방법
Excel 파일을 마우스 오른쪽 버튼으로 클릭 → 보내기 → excel_split.bat를 클릭하면 해당 Excel 파일의 각 시트에 대한 파일이 만들어집니다.
보충: EXE화하여 사용자에게 배포하고 싶은 경우
유저에게 배포하는 경우는, EXE화한 것을 동일하게 sendto 폴더에 두어 주면 bat 파일 불필요로 기동할 수 있습니다. 아래의 기사에서 EXE화의 방법을 소개하고 있습니다.
Reference
이 문제에 관하여(Excel 파일을 마우스 오른쪽 버튼으로 클릭하고 각 시트별로 파일을 분할하는 도구를 Python으로 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sw1394/items/0c45ea1c2a5f90e48185
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Excel 작업을 위한 라이브러리와 파일 경로 생성을 위한 라이브러리가 필요합니다. 표준이 아니기 때문에 사전에 설치해 둡니다.
$ pip install win32com.client
$ pip install pathlib
$ pip install openpyxl
코드
excel_split.pyimport 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.batpython \\Pythonファイルの保存先\excel_split.py
Sendto 폴더에 저장
작성한 bat 파일을 sendto 폴더에 저장합니다.
sendto 폴더는 [Win]키와 [R]키 동시 누르고, 검색 박스에 「shell:sendto」라고 넣으면 표시됩니다.
이용방법
Excel 파일을 마우스 오른쪽 버튼으로 클릭 → 보내기 → excel_split.bat를 클릭하면 해당 Excel 파일의 각 시트에 대한 파일이 만들어집니다.
보충: EXE화하여 사용자에게 배포하고 싶은 경우
유저에게 배포하는 경우는, EXE화한 것을 동일하게 sendto 폴더에 두어 주면 bat 파일 불필요로 기동할 수 있습니다. 아래의 기사에서 EXE화의 방법을 소개하고 있습니다.
Reference
이 문제에 관하여(Excel 파일을 마우스 오른쪽 버튼으로 클릭하고 각 시트별로 파일을 분할하는 도구를 Python으로 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sw1394/items/0c45ea1c2a5f90e48185
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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()
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화의 방법을 소개하고 있습니다.
Reference
이 문제에 관하여(Excel 파일을 마우스 오른쪽 버튼으로 클릭하고 각 시트별로 파일을 분할하는 도구를 Python으로 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sw1394/items/0c45ea1c2a5f90e48185
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Excel 파일을 마우스 오른쪽 버튼으로 클릭 → 보내기 → excel_split.bat를 클릭하면 해당 Excel 파일의 각 시트에 대한 파일이 만들어집니다.
보충: EXE화하여 사용자에게 배포하고 싶은 경우
유저에게 배포하는 경우는, EXE화한 것을 동일하게 sendto 폴더에 두어 주면 bat 파일 불필요로 기동할 수 있습니다. 아래의 기사에서 EXE화의 방법을 소개하고 있습니다.
Reference
이 문제에 관하여(Excel 파일을 마우스 오른쪽 버튼으로 클릭하고 각 시트별로 파일을 분할하는 도구를 Python으로 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sw1394/items/0c45ea1c2a5f90e48185
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Excel 파일을 마우스 오른쪽 버튼으로 클릭하고 각 시트별로 파일을 분할하는 도구를 Python으로 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sw1394/items/0c45ea1c2a5f90e48185텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)