Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

Python

파이썬으로 Excel 워크시트 분할하기

권현욱(엑셀러) 2024. 9. 28. 19:18
반응형

들어가기 전에

Excel 워크시트를 분할하면 데이터 분석, 보고, 협업 등을 보다 쉽게 할 수 있습니다. 파이썬과 파이썬용 라이브러리(Spire.XLS)를 사용하여 Excel 워크시트를 분할하는 다양한 방법을 소개합니다.

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가

이미지: 아이엑셀러 닷컴


※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.

  • 원문: Split Excel Worksheets with Python: A Step-by-Step Guide
  • URL: https://python.plainenglish.io/split-excel-worksheets-with-python-a-step-by-step-guide-0da7752962e3

라이브러리 설치

Python용 Spire.XLS는 Microsoft Excel 파일을 처리하기 위한 풍부한 기능을 갖춘 Python 라이브러리입니다. 이 라이브러리를 사용하면 Excel 워크시트를 분할하거나 병합할 수 있어 데이터 처리 및 자동화 작업에 유용한 도구로 사용할 수 있습니다. 이 라이브러리는 PyPI에서 다음 pip 명령을 사용하여 설치할 수 있습니다.

pip install Spire.XLS

 

워크시트 분할을 위한 핵심 메서드

Python용 Spire.XLS는 워크시트를 분할하는 직접적인 메서드를 제공하지 않습니다. 그러나 동일한 통합 문서 내에서 또는 다른 통합 문서 간에 행, 열, 셀 범위 또는 전체 워크시트를 복사하는 몇 가지 메서드를 제공합니다.

  • WorksheetsCollection.AddCopy(): 워크시트의 복사본을 동일한 통합 문서 또는 다른 통합 문서에 추가합니다.
  • Worksheet.CopyColumn(): 동일한 워크시트 내 또는 다른 워크시트 간에 열을 복사합니다.
  • Worksheet.CopyRow():동일한 워크시트 내 또는 다른 워크시트 간에 행을 복사합니다.
  • Worksheet.Copy():같은 워크시트 내 또는 다른 워크시트 간에 셀 범위를 복사합니다.

 

Spire.XLS를 사용하여 워크시트를 분할하려면 다음 단계를 따릅니다.

  1. 새 통합 문서를 만듭니다.
  2. 위에서 언급한 방법을 사용하여 전체 워크시트 또는 지정된 범위의 셀을 원본 통합 문서에서 새 통합 문서로 복사합니다.

 

이 방법을 사용하면 새 통합 문서를 만들고 원하는 콘텐츠를 원본 통합 문서에서 새 통합 문서로 전송하여 효과적으로 워크시트를 분할할 수 있습니다.

 

파이썬에서 각 워크시트를 별도의 Excel 파일로 분할하기

Excel 통합 문서의 워크시트를 개별 Excel 파일로 분할하려면 다음 단계를 따릅니다.

  1. 소스 Excel 문서를 로드합니다.
  2. Excel 문서의 각 워크시트를 반복합니다.
  3. 각 워크시트에 대해 다음 작업을 수행합니다.
    • 새 통합 문서를 만듭니다.
    • AddCopy()메서드를 사용하여 현재 워크시트를 원본 문서에서 새 통합 문서로 복사합니다.
    • 새 통합 문서를 개별 Excel 파일에 저장합니다.

 

이 프로세스에 따라 여러 워크시트가 포함된 단일 Excel 통합 문서를 개별 Excel 파일로 분할할 수 있으며, 각 파일에는 원본 통합 문서의 워크시트가 하나씩 포함됩니다.

from spire.xls import *
from spire.xls.common import *

# Create a Workbook object
workbook = Workbook()

# Load an Excel file
workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx")

# Specify the folder path for the generated Excel files
folderPath = "C:\\Users\\Administrator\\Desktop\\Output\\"

# Iterate through the worksheets in the Excel file
for worksheet in workbook.Worksheets:

    # Create a new Workbook object for each worksheet
    newWorkbook = Workbook()

    # Remove the default worksheets from the new workbook
    newWorkbook.Worksheets.Clear()

    # Copy the worksheet from the Excel file to the new workbook
    newWorkbook.Worksheets.AddCopy(worksheet)

    # Save the new workbook to the specified folder
    newWorkbook.SaveToFile(folderPath + worksheet.Name + ".xlsx", FileFormat.Version2016)

# Dispose resource
workbook.Dispose()

 

각 워크시트를 별도의 Excel 파일로 분할

 

파이썬에서 열별로 워크시트 분할하기

워크시트를 열별로 분할하려면 다음 단계를 따릅니다.

  1. 소스 Excel 문서를 로드합니다.
  2. 새 통합 문서를 만들고 워크시트를 추가합니다.
  3. CopyColumn()메서드를 사용하여 선택한 열을 소스 문서에서 새 통합 문서의 워크시트로 복사합니다.
  4. 새 통합 문서를 개별 Excel 파일로 저장합니다.
  5. 2 ~ 4단계를 반복하여 원본 문서의 열 하위 집합을 각각 포함하는 Excel 파일을 더 만듭니다.
from spire.xls import *
from spire.xls.common import *

# Create a Workbook object
workbook = Workbook()

# Load an Excel file
workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Employees.xlsx")

# Get the worksheet you want to split
worksheet = workbook.Worksheets[0]

# Specify the folder path for the generated Excel files
folderPath = "C:\\Users\\Administrator\\Desktop\\Output\\"

# Create a new Workbook object
newWorkbook1 = Workbook()

# Remove the default worksheets
newWorkbook1.Worksheets.Clear()

# Add a new worksheet
newWorksheet1 = newWorkbook1.Worksheets.Add("Sheet1")

# Copy columns 1-3 from the original worksheet to the new worksheet
for i in range(1, 4):
    worksheet.CopyColumn(worksheet.Columns[i-1], newWorksheet1, newWorksheet1.LastDataColumn + 1, CopyRangeOptions.All)    

# Copy row heights from the original worksheet to the new worksheet
for i in range(worksheet.Rows.Count):
    newWorksheet1.SetRowHeight(i + 1, worksheet.GetRowHeight(i + 1))

# Save the new workbook to the specified folder
newWorkbook1.SaveToFile(folderPath + "NewExcel_One.xlsx", FileFormat.Version2016)
newWorkbook1.Dispose()

# Create a new Workbook object
newWorkbook2 = Workbook()

# Remove the default worksheets
newWorkbook2.Worksheets.Clear()

# Add a new worksheet
newWorksheet2 = newWorkbook2.Worksheets.Add("Sheet1")

# Copy columns 4-6 from the original worksheet to the new worksheet
for i in range(4, 7):
    worksheet.CopyColumn(worksheet.Columns[i-1], newWorksheet2, newWorksheet2.LastDataColumn + 1, CopyRangeOptions.All)

# Copy row heights from the original worksheet to the new worksheet
for i in range(worksheet.Rows.Count):
    newWorksheet2.SetRowHeight(i + 1, worksheet.GetRowHeight(i + 1))

# Save the new workbook to the specified folder
newWorkbook2.SaveToFile(folderPath + "NewExcel_Two.xlsx", FileFormat.Version2016)

# Dispose resources
newWorkbook1.Dispose()
newWorkbook2.Dispose()

 

워크시트를 열별로 분할

 

파이썬에서 워크시트를 행별로 분할하기

워크시트를 행별로 분할하려면 다음 단계를 따릅니다.

  1. 소스 Excel 문서를 로드합니다.
  2. 새 통합 문서를 만들고 워크시트를 추가합니다.
  3. CopyRow() 메서드를 사용하여 선택한 행을 소스 문서에서 새 통합 문서의 워크시트로 복사합니다.
  4. 새 통합 문서를 개별 Excel 파일로 저장합니다.
  5. 2 ~ 4단계를 반복하여 원본 문서의 행 하위 집합을 포함하는 Excel 파일을 더 만듭니다.

 

from spire.xls import *
from spire.xls.common import *

# Create a Workbook object
workbook = Workbook()

# Load an Excel file
workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Employees.xlsx")

# Get the worksheet you want to split
worksheet = workbook.Worksheets[0]

# Get the header row
header = worksheet.Rows[0]

# Specify the folder path for the generated Excel files
folderPath = "C:\\Users\\Administrator\\Desktop\\Output\\"

# Create a new Workbook object
newWorkbook1 = Workbook()

# Remove the default worksheets
newWorkbook1.Worksheets.Clear()

# Add a new worksheet
newWorksheet1 = newWorkbook1.Worksheets.Add("Sheet1")

# Copy rows 1-6 from the target worksheet to the new worksheet
for i in range(1, 7):
    worksheet.CopyRow(worksheet.Rows[i - 1], newWorksheet1, newWorksheet1.LastDataRow + 1, CopyRangeOptions.All)

# Copy column widths from the original worksheet to the new worksheet
for i in range(worksheet.Columns.Count):
    newWorksheet1.SetColumnWidth(i+1, worksheet.GetColumnWidth(i+1))

# Save the new workbook to the specified folder
newWorkbook1.SaveToFile(folderPath + "R&D.xlsx", FileFormat.Version2016)

# Create a new Workbook object
newWorkbook2 = Workbook()

# Remove the default worksheets
newWorkbook2.Worksheets.Clear()

# Add a new worksheet
newWorksheet2 = newWorkbook2.Worksheets.Add("Sheet1")

# Copy header row from the original worksheet to the new worksheet
worksheet.CopyRow(worksheet.Rows[0], newWorksheet2, newWorksheet2.LastDataRow + 1, CopyRangeOptions.All)

# Copy rows 7-11 from the original worksheet to the new worksheet
for i in range(7, 12):
    worksheet.CopyRow(worksheet.Rows[i - 1], newWorksheet2, newWorksheet2.LastDataRow + 1, CopyRangeOptions.All)

# Copy column widths from the original worksheet to the new worksheet
for i in range(worksheet.Columns.Count):
    newWorksheet2.SetColumnWidth(i + 1, worksheet.GetColumnWidth(i + 1))

# Save the new workbook to the specified folder
newWorkbook2.SaveToFile(folderPath + "Operations.xlsx", FileFormat.Version2016)

# Dispose resources
newWorkbook1.Dispose()
newWorkbook2.Dispose()

 

워크시트를 행별로 분할

 

셀 범위로 워크시트 분할

워크시트를 셀 범위별로 분할하는 단계는 다음과 같습니다.

  1. 원본 Excel 문서를 로드합니다.
  2. 새 통합 문서를 만들고 워크시트를 추가합니다.
  3. Copy()메서드를 사용하여 지정된 범위의 셀을 원본 문서에서 새 통합 문서의 워크시트로 복사합니다.
  4. 새 통합 문서를 개별 Excel 파일로 저장합니다.

 

from spire.xls import *
from spire.xls.common import *

# Create a Workbook object
workbook = Workbook()

# Load an Excel file
workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Employees.xlsx")

# Get the worksheet you want to split
worksheet = workbook.Worksheets[0]

# Get a cell range from the worksheet
sourceRange = worksheet.Range["A1:D7"];

# Create a new Workbook object
newWorkbook = Workbook()

# Remove the default worksheets
newWorkbook.Worksheets.Clear()

# Add a new worksheet
newWorksheet = newWorkbook.Worksheets.Add("Sheet1")

# Copy the cell range to the new worksheet
worksheet.Copy(sourceRange, newWorksheet, 1, 1)

# Copy column widths from the original worksheet to the new worksheet
for i in range(worksheet.Columns.Count):
    newWorksheet.SetColumnWidth(i + 1, worksheet.GetColumnWidth(i + 1))

# Specify the folder path for the generated Excel files
folderPath = "C:\\Users\\Administrator\\Desktop\\Output\\"

# Save the new workbook to the specified folder
newWorkbook.SaveToFile(folderPath + "CellRange.xlsx", FileFormat.Version2016)
newWorkbook.Dispose()

# Dispose resources
newWorkbook.Dispose()

 

셀 범위로 워크시트 분할

 

마치며

Excel 통합 문서 내의 각 워크시트를 별도의 Excel 파일로 분할하고 열, 행 및 셀 범위별로 워크시트를 분할하는 등 Excel 워크시트를 분할하는 몇 가지 유용한 기법에 대해 소개했습니다. Excel 데이터를 확장하는 데 유익하고 도움이 되었기를 바랍니다.