PythonでExcelのワークブックやワークシートを分割する

日常業務では、大量のデータを含むExcelファイルを扱うことが多い。これらのファイルには、異なる表、グラフ、ワークシートが含まれていることがあり、データ管理や分析を複雑にしています。効率と精度を向上させるために、Excelファイルやワークシートの1つを必要に応じて複数のファイルに分割し、データの整理と管理を改善することができます。この記事では、Pythonを使ってExcelのワークブックやワークシートを効率的に分割する方法について、以下の2つの例を紹介します。
* [Excelワークブックをワークシート単位で複数ファイルに分割する](#excelワークブックをワークシート単位で複数ファイルに分割する)
* [Excelワークシートを指定した範囲ごとに複数のファイルに分割する](#excelワークシートを指定した範囲ごとに複数のファイルに分割する)

## Excelファイルを処理するためのPythonライブラリ
この記事では、[**Spire.XLS for Python**](https://www.e-iceblue.com/Introduce/xls-for-python.html)ライブラリを使用する必要があります。SpireXLSforPythonライブラリは、Excelドキュメントの処理、変換、その他の操作をサポートします： 
> pip install Spire.XLS

また、以下のリンクから製品パッケージをダウンロードし、ローカルパスからインストールすることもできます。

https://www.e-iceblue.com/Download/Spire-XLS-Python.html

## Excelワークブックをワークシート単位で複数ファイルに分割する
エクセルのワークブックを分割するには、ワークシートの1つをコピーし、新しいエクセル文書に貼り付けます。具体的な操作方法は以下の通り：
1. **`Workbook.LoadFromFile()`** メソッドを使用してExcelファイルを読み込みます。
1. エクセル・ファイルのすべてのワークシートを反復処理する。
1. ワークシートごとに新しい Excel ワークブックを作成し、その中のデフォルト・ワークシートを削除する。
1. **`Workbook.Worksheets.AddCopy()`** メソッドを使用して、ワークシートを新しい Excel ドキュメントにコピーします。
1. **`Workbook.SaveToFile()`** メソッドを使用して、新しく作成された各 Excel ドキュメントを保存します。
```python
from spire.xls import *
from spire.xls.common import *

# Excelファイルを読み込む
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")

# Excelファイル内のすべてのワークシートを繰り返し処理する
for worksheet in workbook.Worksheets:
    # 新しいWorkbookオブジェクトを作成する
    newWorkbook = Workbook()
    # デフォルトのワークシートを削除する
    newWorkbook.Worksheets.Clear()

    # Excelファイルから新しいワークブックにワークシートをコピーする
    newWorkbook.Worksheets.AddCopy(worksheet)

    # 新しいワークブックを保存する 
    newWorkbook.SaveToFile("Split\\" + worksheet.Name + ".xlsx", FileFormat.Version2016)

workbook.Dispose()
```
![SplitExcelWorkbook.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/b611519f-170f-4f47-ae87-1fd662425af3.png)


## Excelワークシートを指定した範囲ごとに複数のファイルに分割する
ワークシートのデータを要求に応じて異なる文書に分割するには、元のワークシートから新しいExcel文書に指定されたセルデータをコピーすることができます。具体的な操作は以下の通り：

1. **`Workbook.LoadFromFile()`** メソッドを使用してExcelファイルを読み込みます。
1. 指定されたワークシートを取得し、**`Worksheet.Range`** プロパティを使用してヘッダー行と指定されたセル範囲を取得する。
1. 新しいExcelワークブックを作成し、その最初のワークシートを取得する。
1. **`Worksheet.Copy(sourceRange, destRange)`** メソッドを使用して、ヘッダ行と指定されたセル範囲を新しい Excel ワークブックの最初のワークシートにコピーします。
1. **`Workbook.SaveToFile()`** メソッドを使用して、新しいワークブックを Excel ファイルに保存します。
1. 上記の手順を繰り返して、ヘッダ行とその他の指定されたセル領域を新しい Excel ワークブックにコピーします。
```python
from spire.xls import *
from spire.xls.common import *

# Excelファイルを読み込む
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")

# 最初のワークシートを取得する
sheet = workbook.Worksheets[0]

# ヘッダー行の取得
headerRow = sheet.Range[1, 1, 1, 6]

# 2つのセル範囲を取得する
range1 = sheet.Range[2, 1, 5, sheet.LastColumn]
range2 = sheet.Range[6, 1, sheet.LastRow, sheet.LastColumn]

# 新しいワークブックの作成と最初のワークシートの取得
newBook1 = Workbook()
newSheet1 = newBook1.Worksheets[0]

# ヘッダー行と指定したセル範囲を新しいワークシートにコピーする
sheet.Copy(headerRow, newSheet1.Range[1, 1])
sheet.Copy(range1, newSheet1.Range[2, 1])

# コピー列の幅
for i in range(sheet.Columns.Count):
    newSheet1.SetColumnWidth(i + 1, sheet.GetColumnWidth(i + 1))

# 新しいExcelワークブックを保存する
newBook1.SaveToFile("SplitExcel1.xlsx", ExcelVersion.Version2016)

# 別の新しいワークブックを作成し、その最初のワークシートを取得する
newBook2 = Workbook()
newSheet2 = newBook2.Worksheets[0]

# ヘッダー行と指定したセル範囲を新しいワークシートにコピーする
sheet.Copy(headerRow, newSheet2.Range[1, 1])
sheet.Copy(range2, newSheet2.Range[2, 1])

# コピー列の幅
for i in range(sheet.Columns.Count):
    newSheet2.SetColumnWidth(i + 1, sheet.GetColumnWidth(i + 1))

# 新しいExcelワークブックを保存する
newBook2.SaveToFile("SplitExcel2.xlsx", ExcelVersion.Version2016)
```
![SplitExcelWorksheet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/db2e9534-dd4d-4763-a12f-0e61ed59059c.png)


上記の2つの例で、Pythonを使ってExcelのワークブックやワークシートを分割する方法を学ぶことができる。PythonでExcelドキュメントを操作する他の例については、以下を参照してください：

https://www.e-iceblue.com/Tutorials/Python/Spire.XLS-for-Python/Program-Guide/Spire.XLS-for-Python-Program-Guide-Content.html