PowerShellによりExcelファイルを、シート毎にファイル分割するサンプルコードを紹介します。
仕様
シートが複数あるExcelファイルを、シートごとにブック分割します。
以下のようなサンプルファイルを用意します。
実行前
PowerShellのScriptファイル(*.ps1)を実行すると各シートがファイルに運活されます。
実行完了後に、以下3ファイルができるイメージです。
- 「AAA.xlsx」
- 「BBB.xlsx」
- 「CCC.xlsx」
ソースコード
ソースコードはPowerShellで記載しています。
excelファイルはデータとして扱い、マクロ等は一切入れません。
$excel = New-Object -ComObject Excel.Application
$book = $null
$excel.Visible = $false
$excel.DisplayAlerts = $false
$fileName = "book.xlsx"
$filePath = (Convert-Path .) + "\" + $fileName
$book = $excel.Workbooks.Open($filePath)
for ($i=1; $i -le $book.worksheets.Count; $i++){
$newbook = $excel.Workbooks.Add()
# シートコピー
$book.Worksheets($i).copy($newbook.Worksheets(1))
#デフォルトシートの削除
if ($newbook.worksheets(2).Name -eq "Sheet1"){
$newbook.Worksheets(2).Delete()
}
# 新ブックの保存
$newBookPath =(Convert-Path .) + "\" + $i.ToString() + "_" + $newBook.Sheets(1).Name +".xlsx"
[void]$newbook.SaveAs($newBookPath)
# 新ブックのクローズ
[void]$newbook.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($newbook)
}
# コピー元を保存、クローズ
[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
Pause
実行
では実行します。
実行手順
実行手順は簡単です。
「readWorkSheetExcel .ps1」上で右クリックして、「PowerShellで実行」をクリックするだけです。
実行結果
実行後、各シートごとにファイルができています。
※整列させるためにシート順にファイル名の頭にシート番号を入れます。
1_AAA.xlsx
2_BBB.xlsx
3_CCC.xlsx
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
VBAサンプル版
VBAサンプル版も用意してあります。
ケースバイケースで使ってみてください。
以上です。
コメント